{"version":3,"sources":["index.css","../../../node_modules/bootstrap/scss/_progress.scss","../../../node_modules/bootstrap/scss/_normalize.scss","../../../node_modules/bootstrap/scss/_reboot.scss","../../../node_modules/bootstrap/scss/_type.scss","../../../node_modules/bootstrap/scss/_print.scss","../../../node_modules/bootstrap/scss/mixins/_hover.scss","../../../node_modules/bootstrap/scss/mixins/_tab-focus.scss","../../../node_modules/bootstrap/scss/mixins/_lists.scss","../../../node_modules/bootstrap/scss/_images.scss","../../../node_modules/bootstrap/scss/mixins/_image.scss","../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../node_modules/bootstrap/scss/_code.scss","../../../node_modules/bootstrap/scss/_grid.scss","../../../node_modules/bootstrap/scss/mixins/_grid.scss","../../../node_modules/bootstrap/scss/mixins/_clearfix.scss","../../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../../node_modules/bootstrap/scss/mixins/_grid-framework.scss","../../../node_modules/bootstrap/scss/_tables.scss","../../../node_modules/bootstrap/scss/mixins/_table-row.scss","../../../node_modules/bootstrap/scss/_forms.scss","../../../node_modules/bootstrap/scss/mixins/_forms.scss","../../../node_modules/bootstrap/scss/_buttons.scss","../../../node_modules/bootstrap/scss/mixins/_buttons.scss","../../../node_modules/bootstrap/scss/_animation.scss","../../../node_modules/bootstrap/scss/_dropdown.scss","../../../node_modules/bootstrap/scss/mixins/_nav-divider.scss","../../../node_modules/bootstrap/scss/mixins/_reset-filter.scss","../../../node_modules/bootstrap/scss/_button-group.scss","../../../node_modules/bootstrap/scss/_input-group.scss","../../../node_modules/bootstrap/scss/_custom-forms.scss","../../../node_modules/bootstrap/scss/_nav.scss","../../../node_modules/bootstrap/scss/_navbar.scss","../../../node_modules/bootstrap/scss/_card.scss","../../../node_modules/bootstrap/scss/mixins/_cards.scss","../../../node_modules/bootstrap/scss/_breadcrumb.scss","../../../node_modules/bootstrap/scss/_pagination.scss","../../../node_modules/bootstrap/scss/mixins/_pagination.scss","../../../node_modules/bootstrap/scss/_tags.scss","../../../node_modules/bootstrap/scss/mixins/_tag.scss","../../../node_modules/bootstrap/scss/_jumbotron.scss","../../../node_modules/bootstrap/scss/_alert.scss","../../../node_modules/bootstrap/scss/mixins/_alert.scss","../../../node_modules/bootstrap/scss/mixins/_gradients.scss","../../../node_modules/bootstrap/scss/mixins/_progress.scss","../../../node_modules/bootstrap/scss/_media.scss","../../../node_modules/bootstrap/scss/_list-group.scss","../../../node_modules/bootstrap/scss/mixins/_list-group.scss","../../../node_modules/bootstrap/scss/_responsive-embed.scss","../../../node_modules/bootstrap/scss/_close.scss","../../../node_modules/bootstrap/scss/_modal.scss","../../../node_modules/bootstrap/scss/_tooltip.scss","../../../node_modules/bootstrap/scss/mixins/_reset-text.scss","../../../node_modules/bootstrap/scss/_popover.scss","../../../node_modules/bootstrap/scss/_carousel.scss","../../../node_modules/bootstrap/scss/utilities/_align.scss","../../../node_modules/bootstrap/scss/utilities/_background.scss","../../../node_modules/bootstrap/scss/mixins/_background-variant.scss","../../../node_modules/bootstrap/scss/utilities/_borders.scss","../../../node_modules/bootstrap/scss/utilities/_display.scss","../../../node_modules/bootstrap/scss/utilities/_float.scss","../../../node_modules/bootstrap/scss/mixins/_float.scss","../../../node_modules/bootstrap/scss/utilities/_screenreaders.scss","../../../node_modules/bootstrap/scss/mixins/_screen-reader.scss","../../../node_modules/bootstrap/scss/utilities/_spacing.scss","../../../node_modules/bootstrap/scss/utilities/_text.scss","../../../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../../../node_modules/bootstrap/scss/mixins/_text-emphasis.scss","../../../node_modules/bootstrap/scss/mixins/_text-hide.scss","../../../node_modules/bootstrap/scss/utilities/_visibility.scss","index.scss","../../../node_modules/font-awesome/scss/_animated.scss","../../../node_modules/font-awesome/scss/_path.scss","../../../node_modules/font-awesome/scss/_core.scss","../../../node_modules/font-awesome/scss/_larger.scss","../../../node_modules/font-awesome/scss/_fixed-width.scss","../../../node_modules/font-awesome/scss/_list.scss","../../../node_modules/font-awesome/scss/_bordered-pulled.scss","../../../node_modules/font-awesome/scss/_rotated-flipped.scss","../../../node_modules/font-awesome/scss/_mixins.scss","../../../node_modules/font-awesome/scss/_stacked.scss","../../../node_modules/font-awesome/scss/_icons.scss","../../../node_modules/font-awesome/scss/_screen-reader.scss","../../../node_modules/react-select/scss/control.scss","../../../node_modules/react-select/scss/spinner.scss","../../../node_modules/font-mfizz/dist/font-mfizz.css","../../../node_modules/chartist/dist/scss/chartist.scss","chartist.scss","meter.scss","icons.scss","usage.scss","../../../node_modules/react-virtualized/styles.css","../../../node_modules/react-select/scss/mixins.scss","../../../node_modules/react-select/scss/menu.scss","../../../node_modules/react-select/scss/multi.scss"],"names":[],"mappings":"AAAA,iB;;;;;;;;ACIA,wCACE,E,CAAO,0B,CACP,E,CAAK,yB,AAFP,gCACE,E,CAAO,0B,CACP,E,CAAK,yBCEP,I,CACE,sB,CACA,gB,CACA,yB,CACA,6B,CCUA,qB,CAoCA,c,CAOA,4B,CAEA,uC,CDhDF,I,CACE,Q,CCoDA,gG,CACA,c,CACA,e,CAEA,a,CAEA,qB,CD9CF,O,CFZA,K,CACA,O,CACA,U,CACA,M,CACA,M,CACA,M,CACA,I,CACA,I,CACA,G,CACA,O,CACA,O,CEcE,a,CAOF,K,CFhBA,M,CGsVA,M,CHrVA,Q,CACA,K,CEkBE,oB,CAOF,UAAA,W,CACE,Y,CACA,Q,CAOF,Q,CA6GA,G,CF/EA,G,CE7BE,uB,CAQF,Q,CAEE,Y,CAWF,C,CACE,4B,CACA,oC,CAQF,Q,CF1CA,O,CE4CE,e,CAWF,W,CAGE,wC,CAAA,gC,CAOF,C,CFrDA,M,CEgEE,kB,CAOF,G,CACE,iB,CAQF,E,CACE,a,CACA,c,CAOF,I,CAEE,U,CAgBF,G,CF/EA,G,CEiFE,a,CACA,a,CACA,iB,CAIF,G,CACE,a,CAGF,G,CACE,S,CAUF,G,CACE,iB,CAOF,QAAA,M,CACE,e,CFrFF,I,CEqGE,a,CAOF,M,CACE,e,CAQF,E,CACE,sB,CACA,Q,CErMA,e,CACA,kB,CACA,Q,CACA,mC,CF8MF,M,CFnHA,K,CACA,Q,CACA,M,CACA,Q,CEqHE,Y,CACA,Q,CC3HF,E,CDkIA,Q,CACE,e,CAQF,M,CApCA,E,CFxFA,K,CE8HE,gB,CAQF,M,CFjIA,M,CEmIE,mB,CF7HF,Y,CACA,a,CEqIA,M,CFvIA,kB,CE2IE,yB,CFpIF,+B,CACA,8B,CACA,+B,CEyIA,wB,CAIE,iB,CACA,S,CFxIF,4B,CACA,2B,CACA,4B,CE6IA,qB,CAIE,6B,CAOF,Q,CCgBE,W,CAEA,S,CACA,Q,CACA,Q,CDPF,M,CAEE,a,CACA,a,CACA,c,CAEA,kB,CCMA,a,CACA,U,CAEA,mB,CACA,gB,CACA,mB,CDJF,Q,CACE,a,CAQF,e,CFnKA,Y,CE6IA,M,CAwBE,qB,CACA,S,CAOF,wC,CFvKA,wC,CEyKE,W,CAQF,a,CACE,4B,CACA,mB,CAOF,2C,CFhLA,wC,CEkLE,uB,CAOF,2B,CACE,a,CACA,W,CAQF,4B,CACE,yB,CACA,Y,CGzZA,aACE,C,CLoOF,O,CADA,Q,CAEA,c,CAGA,sB,CADA,e,CAEA,c,CAHA,a,CK3NI,0B,CAEA,yB,CAGF,C,CL8NF,S,CK5NI,yB,CAQF,kB,CACE,4B,CAcF,G,CACE,8B,CL8MJ,U,CK/ME,G,CAKE,qB,CASF,K,CACE,0B,CLgMJ,U,CAQA,G,CKvNE,G,CAkBA,E,CAEE,uB,CLuMJ,E,CACA,E,CKrME,C,CAGE,S,CACA,Q,CAGF,E,CLmMF,E,CKjMI,sB,CAMF,O,CACE,Y,CAIA,W,CL6LJ,mB,CK5LM,+B,CAGJ,I,CACE,qB,CAGF,M,CACE,kC,CAEA,S,CL4LJ,S,CK1LM,+B,CL8LN,kB,CK1LI,kB,CAEE,iCF1FR,C,CH4RA,O,CADA,Q,CGxRE,kB,CAoBA,cAAgB,mBAsClB,qB,CACE,mB,CH+QF,E,CGnQA,E,CAAA,E,CAAA,E,CAAA,E,CAAA,E,CAAA,E,CA4BA,E,CAnBA,C,CHyPA,E,CGjQE,Y,CHkQF,E,CGvOA,E,CAnBA,C,CHyPA,E,CGvPE,kB,CH2OF,yB,CGvOA,W,CAGE,W,CACA,gC,CAGF,O,CACE,kB,CACA,iB,CACA,mB,CAUF,K,CHuOA,K,CACA,K,CAFA,K,CGlOE,e,CAOF,E,CACE,mB,CACA,a,CAGF,U,CA8DA,M,CA7DE,e,CAQF,C,CACE,a,CACA,oB,CG7IE,O,CAAA,O,CHgJA,a,CACA,yB,CAGF,O,CIlKA,yC,CACA,mB,CJ4KF,MAAA,M,MAAA,W,CACE,a,CACA,oB,CGjKE,MAAA,M,MAAA,iB,CAAA,MAAA,M,MAAA,iB,CHoKA,a,CACA,oB,CAGF,MAAA,M,MAAA,iB,CACE,S,CASJ,G,CAME,a,CAmBF,G,CAGE,qB,CAYF,a,CACE,c,CADF,a,CAeA,C,CH8KA,I,CACA,M,CAEA,K,CACA,K,CACA,M,CACA,O,CACA,Q,CG5KE,yB,CAQF,K,CAEE,wB,CAEA,4B,CAGF,O,CACE,kB,CACA,qB,CACA,a,CAEA,mB,CALF,O,CAQA,E,CAEE,e,CAQF,K,CAEE,oB,CACA,mB,CAOF,Y,CACE,kB,CACA,yC,CH+JF,M,CG5JA,K,CH6JA,M,CACA,Q,CGxJE,mB,CH6JF,6B,CGrJE,0B,CACE,kB,CAKJ,gB,CHqJA,0B,CACA,iB,CAFA,gB,CG3IE,0B,CAGF,Q,CAEE,e,CAwBF,kB,CAKE,uB,CAYF,Q,CACE,sB,CHmIF,G,CAAK,G,CAAK,G,CAAK,G,CAAK,G,CAAK,G,CIjgBzB,E,CAAA,E,CAAA,E,CAAA,E,CAAA,E,CAAA,E,CAEE,mB,CACA,mB,CACA,e,CACA,e,CACA,a,CAGF,G,CAAA,E,CAAU,gB,CACV,G,CAAA,E,CAAU,c,CACV,G,CAAA,E,CAAU,iB,CACV,G,CAAA,E,CAAU,gB,CACV,G,CAAA,E,CAAU,iB,CACV,G,CAAA,E,CAAU,c,CAEV,K,CACE,iB,CACA,e,CAIF,U,CAIA,U,CAHE,c,CACA,e,CAEF,U,CACE,gB,CAGF,U,CAIA,U,CAHE,gB,CACA,e,CAEF,U,CACE,gB,CJ+hBF,M,CI1gBA,K,CAEE,a,CACA,e,CJ6gBF,K,CI1gBA,I,CAEE,Y,CACA,wB,CAaF,Y,CALA,c,CIzEE,c,CACA,e,CJgFF,iB,CACE,oB,CAEA,sBAAA,Y,CACE,gB,CAUJ,W,CACE,a,CACA,wB,CAIF,W,CACE,kB,CACA,kB,CACA,iB,CACA,gC,CAGF,kB,CACE,a,CACA,a,CACA,a,CAEA,0B,CACE,Y,CAKJ,mB,CACE,kB,CACA,c,CACA,gB,CACA,iC,CACA,a,CAIA,8C,CACE,U,CAEF,6C,CACE,Y,CAQA,Y,CACE,U,CJ0fN,oC,CSpoBA,kC,CAAA,U,CAMA,c,CCFE,c,CAGA,W,CDDF,c,CACE,c,CACA,qB,CACA,qB,CEZE,oB,CFcF,8B,CAWF,O,CAEE,oB,CAGF,W,CACE,mB,CACA,a,CAGF,e,CACE,a,CACA,a,CGxCF,I,CZwqBA,G,CACA,G,CACA,I,CYtqBE,2E,CAIF,I,CASA,G,CACE,mB,CAVF,I,CAGE,a,CACA,wB,CDTE,oB,CCKJ,I,CASA,G,CAiBA,G,CAIE,a,CArBF,G,CAIE,qB,CDlBE,mB,CCiBF,U,CAKA,O,CACE,S,CACA,c,CACA,e,CAMJ,G,CACE,a,CACA,Y,CACA,kB,CAEA,a,CAGA,Q,CACE,S,CACA,iB,CACA,a,CACA,4B,CACA,e,CAKJ,e,CACE,gB,CACA,iB,CClDA,U,CCAA,gB,CACA,iB,CACA,iB,CACA,kB,CCPA,uB,CAAA,iB,CAAA,W,CACE,U,CACA,a,CACA,U,CCyCA,yBHxCF,U,CCcI,W,CACA,gB,AEyBF,yBHxCF,U,CCcI,W,CACA,gB,AEyBF,yBHxCF,U,CCcI,W,CACA,gB,AEyBF,0BHxCF,U,CCcI,Y,CACA,gBDHJ,gB,CCZA,gB,CACA,iB,CACA,iB,CACA,kB,CDmBA,I,CCmBI,kB,CACA,iB,CEFF,yBHlBF,I,CCmBI,kB,CACA,mB,AEFF,yBHlBF,I,CCmBI,kB,CACA,mB,AEFF,yBHlBF,I,CCmBI,kB,CACA,mB,AEFF,0BHlBF,I,CCmBI,kB,CACA,mBGxCJ,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CACE,iB,CAEA,c,CHmBE,kB,CACA,iB,CEeF,yBCtCF,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CHsBI,kB,CACA,mB,AEeF,yBCtCF,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CHsBI,kB,CACA,mB,AEeF,yBCtCF,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CHsBI,kB,CACA,mB,AEeF,0BCtCF,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,O,CAAA,S,CAAA,U,CAAA,U,CAAA,U,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CAAA,S,CHsBI,kB,CACA,mBGeE,S,CHmCJ,U,CACA,mB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,S,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,oB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,S,CGpCI,S,CHoCJ,oB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,S,CGpCI,U,CHmCJ,U,CACA,oB,CGpCI,U,CHmCJ,U,CACA,oB,CGpCI,U,CHmCJ,U,CACA,U,CG7BM,U,CH0CR,U,CG1CQ,U,CH0CR,mB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,W,CH0CR,oB,CG1CQ,W,CH0CR,oB,CG1CQ,W,CH0CR,U,CG1CQ,U,CHsCR,S,CGtCQ,U,CHsCR,kB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,W,CHsCR,mB,CGtCQ,W,CHsCR,mB,CGtCQ,W,CHsCR,S,CG7BQ,Y,CHyBR,yB,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,a,CHyBR,0B,CGzBQ,a,CHyBR,0B,CEzCE,yBCAI,S,CHmCJ,U,CACA,mB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,S,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,oB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,S,CGpCI,S,CHoCJ,oB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,S,CGpCI,U,CHmCJ,U,CACA,oB,CGpCI,U,CHmCJ,U,CACA,oB,CGpCI,U,CHmCJ,U,CACA,U,CG7BM,U,CH0CR,U,CG1CQ,U,CH0CR,mB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,W,CH0CR,oB,CG1CQ,W,CH0CR,oB,CG1CQ,W,CH0CR,U,CG1CQ,U,CHsCR,S,CGtCQ,U,CHsCR,kB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,W,CHsCR,mB,CGtCQ,W,CHsCR,mB,CGtCQ,W,CHsCR,S,CG7BQ,Y,CHyBR,a,CGzBQ,Y,CHyBR,yB,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,a,CHyBR,0B,CGzBQ,a,CHyBR,4B,AEzCE,yBCAI,S,CHmCJ,U,CACA,mB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,S,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,oB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,S,CGpCI,S,CHoCJ,oB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,S,CGpCI,U,CHmCJ,U,CACA,oB,CGpCI,U,CHmCJ,U,CACA,oB,CGpCI,U,CHmCJ,U,CACA,U,CG7BM,U,CH0CR,U,CG1CQ,U,CH0CR,mB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,W,CH0CR,oB,CG1CQ,W,CH0CR,oB,CG1CQ,W,CH0CR,U,CG1CQ,U,CHsCR,S,CGtCQ,U,CHsCR,kB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,W,CHsCR,mB,CGtCQ,W,CHsCR,mB,CGtCQ,W,CHsCR,S,CG7BQ,Y,CHyBR,a,CGzBQ,Y,CHyBR,yB,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,a,CHyBR,0B,CGzBQ,a,CHyBR,4B,AEzCE,yBCAI,S,CHmCJ,U,CACA,mB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,S,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,oB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,S,CGpCI,S,CHoCJ,oB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,S,CGpCI,U,CHmCJ,U,CACA,oB,CGpCI,U,CHmCJ,U,CACA,oB,CGpCI,U,CHmCJ,U,CACA,U,CG7BM,U,CH0CR,U,CG1CQ,U,CH0CR,mB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,W,CH0CR,oB,CG1CQ,W,CH0CR,oB,CG1CQ,W,CH0CR,U,CG1CQ,U,CHsCR,S,CGtCQ,U,CHsCR,kB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,W,CHsCR,mB,CGtCQ,W,CHsCR,mB,CGtCQ,W,CHsCR,S,CG7BQ,Y,CHyBR,a,CGzBQ,Y,CHyBR,yB,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,a,CHyBR,0B,CGzBQ,a,CHyBR,4B,AEzCE,0BCAI,S,CHmCJ,U,CACA,mB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,S,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,oB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,S,CGpCI,S,CHoCJ,oB,CGpCI,S,CAAA,S,CHmCJ,U,CACA,oB,CGpCI,S,CHoCJ,S,CGpCI,U,CHmCJ,U,CACA,oB,CGpCI,U,CHmCJ,U,CACA,oB,CGpCI,U,CHmCJ,U,CACA,U,CG7BM,U,CH0CR,U,CG1CQ,U,CH0CR,mB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,oB,CG1CQ,U,CH0CR,S,CG1CQ,W,CH0CR,oB,CG1CQ,W,CH0CR,oB,CG1CQ,W,CH0CR,U,CG1CQ,U,CHsCR,S,CGtCQ,U,CHsCR,kB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,mB,CGtCQ,U,CHsCR,Q,CGtCQ,W,CHsCR,mB,CGtCQ,W,CHsCR,mB,CGtCQ,W,CHsCR,S,CG7BQ,Y,CHyBR,a,CGzBQ,Y,CHyBR,yB,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,0B,CGzBQ,Y,CHyBR,e,CGzBQ,a,CHyBR,0B,CGzBQ,a,CHyBR,4BIlFF,M,CACE,U,CACA,c,CACA,kB,ClBwqDF,S,CkBtqDE,S,CAEE,c,CACA,kB,CACA,4B,CAGF,e,CACE,qB,CACA,+B,CAGF,kB,CACE,4B,CAGF,a,CACE,qB,ClBsqDJ,Y,CkB5pDE,Y,CAEE,a,CASJ,e,ClBypDA,kB,CkBtpDE,kB,CAFA,wB,ClB4pDF,wB,CkBppDI,wB,CAEE,uB,CAWJ,wC,CACE,gC,CChEA,a,CnBotDJ,gB,CADA,gB,CM/sDI,gC,CaYI,mC,CnB4sDR,mC,CMxtDI,2B,CYwEE,iC,CC5EF,c,CnBkuDJ,iB,CADA,iB,CmB9tDM,wB,CbCF,iC,CaYI,oC,CnB0tDR,oC,CmB5tDQ,wB,CAdJ,W,CnBgvDJ,c,CADA,c,CmB5uDM,wB,CbCF,8B,CaYI,iC,CnBwuDR,iC,CmB1uDQ,wB,CAdJ,c,CnB8vDJ,iB,CADA,iB,CmB1vDM,wB,CbCF,iC,CaYI,oC,CnBsvDR,oC,CmBxvDQ,wB,CAdJ,a,CnB4wDJ,gB,CADA,gB,CmBxwDM,wB,CbCF,gC,CaYI,mC,CnBowDR,mC,CmBtwDQ,wB,CDmGR,c,CAbE,iB,CACE,U,CACA,wB,CAKF,iB,CACE,a,CACA,wB,CAIJ,c,CACE,a,ClBqrDF,iB,CkBlrDE,iB,ClBmrDF,uB,CkBhrDI,oB,CAGF,6B,CACE,Q,CAYJ,iB,CACE,a,CACA,U,CACA,a,CACA,e,CAUA,mB,CA8BA,gB,CA7BE,U,CAGF,mB,CACE,a,CACA,kB,ClBkqDJ,gB,CkB/pDE,gB,CAEE,4B,CACA,6B,ClBiqDJ,2B,CkB/pDI,2B,CACE,8B,ClBoqDN,+C,CADA,+C,CAGA,+C,CADA,+C,CAHA,+C,CkB1pDM,+C,CAEE,+B,ClBmqDR,mB,CkB3pDI,mB,CAEE,uB,CACA,wB,CE1LN,a,CACE,a,CACA,U,CAGA,oB,CACA,c,CACA,gB,CACA,a,CACA,qB,CAEA,qB,CACA,2B,CACA,gC,CAKE,oB,CAUF,yB,CACE,4B,CACA,Q,CCWF,mB,CACE,a,CACA,qB,CACA,oB,CACA,S,CDRF,wC,CACE,U,CAEA,S,CAHF,mC,CAAA,oC,CACE,U,CAEA,S,CAHF,0B,CACE,U,CAEA,S,CAQF,sB,CAAA,uB,CAEE,wB,CAEA,S,CAGF,sB,CACE,kB,CAKF,wBAAA,M,MAAA,W,CAEE,yB,CAGF,oC,CAME,a,CACA,qB,CAKJ,kB,CpBi0DA,mB,CoB/zDE,a,CAUF,e,CACE,iB,CACA,oB,CACA,e,CAGF,kB,CACE,kB,CACA,qB,CACA,iB,CAGF,kB,CACE,kB,CACA,qB,CACA,iB,CAUF,gB,CACE,iB,CACA,oB,CACA,e,CACA,c,CASF,oB,CACE,iB,CACA,oB,CACA,gB,CACA,wB,CACA,kB,CpBgzD6D,oC,CoB9yD7D,oC,CpB8yDmG,iD,CACrG,sD,CACA,yD,CoBhzDE,iD,CpB6yDF,sD,CACA,yD,CoB5yDI,e,CACA,c,CAaJ,gB,CAAA,6B,CpBuyDA,qC,CoBtyDE,oB,CACA,iB,CT3JE,mB,CXw8DJ,gDAAoD,M,MAAY,W,CoBxyD9D,wCAAA,M,MAAA,W,CpBuyDF,6CAA+C,M,MAAY,W,CoBvyDzD,2BAAA,M,MAAA,W,CACE,gB,CAIJ,gB,CAAA,6B,CpByyDA,qC,CoBxyDE,qB,CACA,iB,CTvKE,mB,CXs9DJ,gDAAoD,M,MAAY,W,CoB1yD9D,wCAAA,M,MAAA,W,CpByyDF,6CAA+C,M,MAAY,W,CoBzyDzD,2BAAA,M,MAAA,W,CACE,sB,CAUJ,W,CACE,kB,CAGF,U,CACE,a,CACA,iB,CAQF,W,CACE,iB,CACA,a,CACA,oB,CAGA,uB,CACE,kB,CAIA,sC,CACE,a,CACA,kB,CAKN,iB,CACE,oB,CACA,e,CACA,c,CAGF,iB,CACE,iB,CACA,iB,CACA,oB,CAEA,4B,CACE,e,CAKJ,kB,CACE,iB,CACA,oB,CACA,oB,CACA,e,CACA,qB,CACA,c,CAEA,qC,CACE,kB,CAGF,2B,CACE,a,CACA,kB,CASJ,sB,CACE,iB,CpBqxDF,oB,CoBlxDA,qB,CpBixDA,qB,CoB9wDE,qB,CACA,2B,CACA,wC,CACA,+B,CpBuxDF,4B,CADA,+B,CADA,8B,CqB3hEE,mC,CrB0hEF,gC,CqBrhEI,a,CAIF,0B,CACE,oB,CAGE,gC,CACE,2D,CAMN,+B,CACE,a,CACA,oB,CACA,wB,CDsPF,kC,CACE,sQ,CpBqyDJ,4B,CADA,+B,CADA,8B,CqBjjEE,mC,CrBgjEF,gC,CqB3iEI,a,CAIF,0B,CACE,oB,CAGE,gC,CACE,2D,CAMN,+B,CACE,a,CACA,oB,CACA,qB,CD8PF,kC,CACE,+U,CpBmzDJ,2B,CADA,8B,CADA,6B,CqBvkEE,kC,CrBskEF,+B,CqBjkEI,a,CAIF,yB,CACE,oB,CAGE,+B,CACE,2D,CAMN,8B,CACE,a,CACA,oB,CACA,wB,CDsQF,gC,CACE,gT,CJxPA,yBI2QA,wB,CACE,oB,CACA,e,CACA,qB,CAIF,0B,CACE,oB,CACA,U,CACA,qB,CAIF,iC,CACE,oB,CAGF,yB,CACE,oB,CACA,U,CACA,qB,CpB0yDJ,uC,CoBxyDI,4C,CpBuyDJ,0C,CoBpyDM,U,CAKJ,uC,CACE,U,CAUF,wB,CAPA,gC,CACE,e,CACA,qB,CAKF,wB,CACE,oB,CACA,Y,CAIF,8B,CACE,c,CAEF,8B,CACE,iB,CACA,a,CAIF,iD,CACE,OE5WN,I,CACE,oB,CACA,e,CACA,gB,CACA,iB,CACA,kB,CACA,qB,CACA,c,CACA,wB,CAAA,oB,CAAA,gB,CACA,4B,CC8FA,kB,CACA,c,CZ1GE,oB,CWkBA,iB,CAAA,iB,CAAA,U,CAAA,iB,CAAA,iB,CAAA,U,CfhBF,yC,CACA,mB,CDaE,U,CAAA,U,CgBSA,oB,CAEF,U,CACE,oB,CAGF,W,CAAA,W,CAEE,qB,CACA,S,CAIF,a,CAAA,a,CAEE,kB,CACA,W,CAMJ,c,CtBooEA,wB,CsBloEE,mB,CAQF,Y,CCpDE,U,CACA,wB,CACA,oB,CjBDE,kB,CiBKA,U,CACA,wB,CACI,oB,CAGN,kB,CAAA,kB,CAEE,U,CACA,wB,CACI,oB,CAGN,mB,CAAA,mB,CAAA,kC,CAGE,U,CACA,wB,CACI,oB,CAEJ,qB,CAGA,yB,CAAA,yB,CAAA,yB,CAAA,yB,CAAA,yB,CAAA,yB,CAAA,wC,CAAA,wC,CAAA,wC,CAGE,U,CACA,wB,CACI,oB,CAMN,2B,CAAA,2B,CAAA,2B,CAAA,2B,CAEE,wB,CACI,oB,CjBzCN,2B,CAAA,2B,CiB4CE,wB,CACI,oB,CDSV,c,CCvDE,a,CACA,qB,CACA,iB,CjBDE,oB,CiBKA,a,CACA,wB,CACI,oB,CAGN,oB,CAAA,oB,CAEE,a,CACA,wB,CACI,oB,CAGN,qB,CAAA,qB,CAAA,oC,CAGE,a,CACA,wB,CACI,oB,CAEJ,qB,CAGA,2B,CAAA,2B,CAAA,2B,CAAA,2B,CAAA,2B,CAAA,2B,CAAA,0C,CAAA,0C,CAAA,0C,CAGE,a,CACA,wB,CACI,oB,CAMN,6B,CAAA,6B,CAAA,6B,CAAA,6B,CAEE,qB,CACI,iB,CjBzCN,6B,CAAA,6B,CiB4CE,qB,CACI,iB,CDYV,S,CC1DE,U,CACA,wB,CACA,oB,CjBDE,e,CiBKA,U,CACA,wB,CACI,oB,CAGN,e,CAAA,e,CAEE,U,CACA,wB,CACI,oB,CAGN,gB,CAAA,gB,CAAA,+B,CAGE,U,CACA,wB,CACI,oB,CAEJ,qB,CAGA,sB,CAAA,sB,CAAA,sB,CAAA,sB,CAAA,sB,CAAA,sB,CAAA,qC,CAAA,qC,CAAA,qC,CAGE,U,CACA,wB,CACI,oB,CAMN,wB,CAAA,wB,CAAA,wB,CAAA,wB,CAEE,wB,CACI,oB,CjBzCN,wB,CAAA,wB,CiB4CE,wB,CACI,oB,CDeV,Y,CC7DE,U,CACA,wB,CACA,oB,CjBDE,kB,CiBKA,U,CACA,wB,CACI,oB,CAGN,kB,CAAA,kB,CAEE,U,CACA,wB,CACI,oB,CAGN,mB,CAAA,mB,CAAA,kC,CAGE,U,CACA,wB,CACI,oB,CAEJ,qB,CAGA,yB,CAAA,yB,CAAA,yB,CAAA,yB,CAAA,yB,CAAA,yB,CAAA,wC,CAAA,wC,CAAA,wC,CAGE,U,CACA,wB,CACI,oB,CAMN,2B,CAAA,2B,CAAA,2B,CAAA,2B,CAEE,wB,CACI,oB,CjBzCN,2B,CAAA,2B,CiB4CE,wB,CACI,oB,CDkBV,Y,CChEE,U,CACA,wB,CACA,oB,CjBDE,kB,CiBKA,U,CACA,wB,CACI,oB,CAGN,kB,CAAA,kB,CAEE,U,CACA,wB,CACI,oB,CAGN,mB,CAAA,mB,CAAA,kC,CAGE,U,CACA,wB,CACI,oB,CAEJ,qB,CAGA,yB,CAAA,yB,CAAA,yB,CAAA,yB,CAAA,yB,CAAA,yB,CAAA,wC,CAAA,wC,CAAA,wC,CAGE,U,CACA,wB,CACI,oB,CAMN,2B,CAAA,2B,CAAA,2B,CAAA,2B,CAEE,wB,CACI,oB,CjBzCN,2B,CAAA,2B,CiB4CE,wB,CACI,oB,CDqBV,W,CCnEE,U,CACA,wB,CACA,oB,CjBDE,iB,CiBKA,U,CACA,wB,CACI,oB,CAGN,iB,CAAA,iB,CAEE,U,CACA,wB,CACI,oB,CAGN,kB,CAAA,kB,CAAA,iC,CAGE,U,CACA,wB,CACI,oB,CAEJ,qB,CAGA,wB,CAAA,wB,CAAA,wB,CAAA,wB,CAAA,wB,CAAA,wB,CAAA,uC,CAAA,uC,CAAA,uC,CAGE,U,CACA,wB,CACI,oB,CAMN,0B,CAAA,0B,CAAA,0B,CAAA,0B,CAEE,wB,CACI,oB,CjBzCN,0B,CAAA,0B,CiB4CE,wB,CACI,oB,CD0BV,oB,CCpBE,a,CACA,qB,CACA,4B,CACA,oB,CjBtDE,0B,CiByDA,U,CACA,wB,CACI,oB,CAGN,0B,CAAA,0B,CAEE,U,CACA,wB,CACI,oB,CAGN,2B,CAAA,2B,CAAA,0C,CAGE,U,CACA,wB,CACI,oB,CAEJ,iC,CAAA,iC,CAAA,iC,CAAA,iC,CAAA,iC,CAAA,iC,CAAA,gD,CAAA,gD,CAAA,gD,CAGE,U,CACA,wB,CACI,oB,CAMN,mC,CAAA,mC,CAAA,mC,CAAA,mC,CAEE,oB,CjBzFF,mC,CAAA,mC,CiB4FE,oB,CDlBN,sB,CCvBE,U,CACA,qB,CACA,4B,CACA,iB,CjBtDE,4B,CiByDA,U,CACA,qB,CACI,iB,CAGN,4B,CAAA,4B,CAEE,U,CACA,qB,CACI,iB,CAGN,6B,CAAA,6B,CAAA,4C,CAGE,U,CACA,qB,CACI,iB,CAEJ,mC,CAAA,mC,CAAA,mC,CAAA,mC,CAAA,mC,CAAA,mC,CAAA,kD,CAAA,kD,CAAA,kD,CAGE,U,CACA,wB,CACI,oB,CAMN,qC,CAAA,qC,CAAA,qC,CAAA,qC,CAEE,iB,CjBzFF,qC,CAAA,qC,CiB4FE,iB,CDfN,iB,CC1BE,a,CACA,qB,CACA,4B,CACA,oB,CjBtDE,uB,CiByDA,U,CACA,wB,CACI,oB,CAGN,uB,CAAA,uB,CAEE,U,CACA,wB,CACI,oB,CAGN,wB,CAAA,wB,CAAA,uC,CAGE,U,CACA,wB,CACI,oB,CAEJ,8B,CAAA,8B,CAAA,8B,CAAA,8B,CAAA,8B,CAAA,8B,CAAA,6C,CAAA,6C,CAAA,6C,CAGE,U,CACA,wB,CACI,oB,CAMN,gC,CAAA,gC,CAAA,gC,CAAA,gC,CAEE,oB,CjBzFF,gC,CAAA,gC,CiB4FE,oB,CDZN,oB,CC7BE,a,CACA,qB,CACA,4B,CACA,oB,CjBtDE,0B,CiByDA,U,CACA,wB,CACI,oB,CAGN,0B,CAAA,0B,CAEE,U,CACA,wB,CACI,oB,CAGN,2B,CAAA,2B,CAAA,0C,CAGE,U,CACA,wB,CACI,oB,CAEJ,iC,CAAA,iC,CAAA,iC,CAAA,iC,CAAA,iC,CAAA,iC,CAAA,gD,CAAA,gD,CAAA,gD,CAGE,U,CACA,wB,CACI,oB,CAMN,mC,CAAA,mC,CAAA,mC,CAAA,mC,CAEE,oB,CjBzFF,mC,CAAA,mC,CiB4FE,oB,CDTN,oB,CChCE,a,CACA,qB,CACA,4B,CACA,oB,CjBtDE,0B,CiByDA,U,CACA,wB,CACI,oB,CAGN,0B,CAAA,0B,CAEE,U,CACA,wB,CACI,oB,CAGN,2B,CAAA,2B,CAAA,0C,CAGE,U,CACA,wB,CACI,oB,CAEJ,iC,CAAA,iC,CAAA,iC,CAAA,iC,CAAA,iC,CAAA,iC,CAAA,gD,CAAA,gD,CAAA,gD,CAGE,U,CACA,wB,CACI,oB,CAMN,mC,CAAA,mC,CAAA,mC,CAAA,mC,CAEE,oB,CjBzFF,mC,CAAA,mC,CiB4FE,oB,CDNN,mB,CCnCE,a,CACA,qB,CACA,4B,CACA,oB,CjBtDE,yB,CiByDA,U,CACA,wB,CACI,oB,CAGN,yB,CAAA,yB,CAEE,U,CACA,wB,CACI,oB,CAGN,0B,CAAA,0B,CAAA,yC,CAGE,U,CACA,wB,CACI,oB,CAEJ,gC,CAAA,gC,CAAA,gC,CAAA,gC,CAAA,gC,CAAA,gC,CAAA,+C,CAAA,+C,CAAA,+C,CAGE,U,CACA,wB,CACI,oB,CAMN,kC,CAAA,kC,CAAA,kC,CAAA,kC,CAEE,oB,CjBzFF,kC,CAAA,kC,CiB4FE,oB,CDIN,S,CACE,e,CACA,a,CACA,e,CAEA,S,CAAA,gB,CAAA,gB,CAAA,kB,CAIE,4B,CAGF,S,CAAA,gB,CAAA,e,CAGE,wB,ChB/GA,e,CgBkHA,wB,ChBxGA,e,CAAA,e,CgB2GA,a,CACA,yB,CACA,4B,ChB7GA,wB,CAAA,wB,CgBiHE,a,CACA,oB,CAUN,kB,CAAA,O,CCnCE,qB,CACA,iB,CZ1GE,mB,CWgJJ,kB,CAAA,O,CCvCE,oB,CACA,iB,CZ1GE,mB,CW0JJ,U,CACE,a,CACA,U,CAIF,qB,CACE,gB,CtB69EF,4B,CADA,2B,CsBr9EE,4B,CACE,U,CE7KJ,K,CACE,S,CACA,8B,CAEA,Q,CACE,S,CAIJ,S,CACE,Y,CACA,Y,CACE,a,CAKF,c,CACE,iB,CAKF,iB,CACE,uB,CAIJ,W,CAEE,Q,CACA,e,CACA,+B,CACA,wB,CACA,0B,CANF,W,CxB2oFA,S,CyBtqFA,O,CAEE,iB,CAKA,uB,CACE,oB,CACA,O,CACA,Q,CACA,gB,CACA,qB,CACA,U,CACA,qB,CACA,mC,CACA,kC,CAIF,sB,CACE,S,CAMA,+B,CACE,Y,CACA,wB,CAMN,c,CACE,iB,CACA,Q,CACA,M,CACA,Y,CACA,Y,CACA,U,CACA,e,CACA,e,CACA,kB,CACA,c,CACA,a,CACA,e,CACA,e,CACA,qB,CACA,2B,CACA,gC,CdhDE,oB,CcsDJ,iB,CCrDE,U,CACA,c,CACA,e,CACA,wB,CDyDF,c,CACE,a,CACA,U,CACA,kB,CACA,U,CACA,e,CACA,a,CACA,kB,CACA,kB,CACA,c,CACA,Q,CnBvDE,oB,CAAA,oB,CmB0DA,a,CACA,oB,CACA,wB,CnB5CA,qB,CAAA,2B,CAAA,2B,CmBkDE,U,CACA,oB,CACA,wB,CACA,S,CnBrDF,uB,CAAA,6B,CAAA,6B,CmB8DE,a,CnB9EF,6B,CAAA,6B,CmBmFE,oB,CACA,kB,CACA,4B,CACA,qB,CEpGJ,oE,CF6GA,oB,CACE,a,CAIF,O,CACE,S,CAQJ,oB,CACE,O,CACA,S,CAGF,mB,CACE,U,CACA,M,CAIF,gB,CACE,a,CACA,oB,CACA,e,CACA,iB,CACA,a,CACA,kB,CAIF,kB,CACE,c,CACA,K,CACA,O,CACA,Q,CACA,M,CACA,W,CAWA,c,CzBynFF,qC,CyBxnFI,U,CACA,Y,CACA,wB,CAIF,sB,CzBwnFF,6C,CyBvnFI,Q,CACA,W,CACA,qB,CG9KJ,U,C5B0yFA,mB,C4BxyFE,iB,CACA,oB,CACA,qB,CAEA,e,CAEE,U,C5BwyFJ,wB,C4B1yFE,e,CACE,iB,CAEA,e,C5B+yFJ,+B,CADA,+B,CADA,8B,C4B1yFI,sB,CAAA,sB,CAAA,qB,CAGE,S,C5B6yFN,8B,CMrzFI,qB,CsBWE,S,CAOJ,oB,C5BwyFF,0B,CACA,0B,CACA,gC,C4BtyFI,gB,CAKJ,Y,CACE,kB,CbrCA,mB,CACE,U,CACA,a,CACA,U,CaqCF,uB,C5B0yFF,yB,C4BxyFI,U,CAGF,iB,C5ByyFF,uB,CACA,yB,C4BvyFI,iB,CAIJ,oBAAA,Y,MAAA,W,MAAA,iB,CACE,e,CAIF,2B,CACE,a,CAEA,gCAAA,W,MAAA,iB,CjB5CE,4B,CACA,yB,CiBgDJ,+BAAA,a,C5BuyFA,gCAAkC,a,CW10F9B,2B,CACA,wB,CiBwCJ,qB,CACE,U,CAEF,0BAAA,Y,MAAA,iB,CACE,e,CAGA,sCAAA,4B,C5BwyFF,sCAAwC,6B,CWt2FpC,4B,CACA,yB,CiBkEJ,qCAAA,8B,CjBrDI,2B,CACA,wB,CiByDJ,kC,C5ByyFA,gC,C4BvyFE,S,CAgBF,2B,CACE,oB,CACA,mB,CAEA,kC,CACE,a,CAIJ,yC,CAAA,8B,CACE,qB,CACA,oB,CAGF,yC,CAAA,8B,CACE,sB,CACA,qB,CAiBF,W,CACE,a,CAGF,yB,CAAA,c,CAEE,wB,CAGF,iC,CAAA,sB,CACE,wB,CAUA,wB,C5BswFF,8B,CACA,mC,C4BpwFI,a,CAEA,U,CACA,c,CAQE,U,Cb7KJ,qC,CACE,U,CACA,a,CACA,U,Ca8KF,6B,C5BowFF,mC,CACA,mC,CACA,yC,C4BlwFI,e,CACA,a,CAeJ,mCAAA,Y,MAAA,iB,CAVE,6BAAA,Y,MAAA,Y,CACE,e,CAEF,yCAAA,Y,CjBvKE,4B,CACA,2B,CiByKF,wCAAA,a,CjBxLE,yB,CACA,wB,CiB+LF,+CAAA,4B,C5BowFF,+CAAiD,6B,CWt7F7C,4B,CACA,2B,CiBsLJ,8CAAA,8B,CjBrMI,yB,CACA,wB,CX88FJ,+C,C4BtvFI,4C,C5BwvFJ,0D,CADA,uD,C4BrvFM,iB,CACA,kB,CACA,mB,CCnON,Y,CACE,iB,CACA,U,CAKE,a,CAGA,wB,CAGF,0B,CAGE,iB,CACA,S,CAWE,U,CACA,U,CAEF,e,CvBkBA,iC,CAAA,gC,CAAA,gC,CuB7BE,S,C7B49FN,0B,C6B78FA,kB,C7B48FA,gB,C6Bx8FI,kB,C7B88FJ,+BAA+B,Y,MAAkB,Y,C6B38F/C,uBAAA,Y,MAAA,Y,C7B08FF,qBAAqB,Y,MAAkB,Y,CWp/FnC,e,CkB+CJ,kB,CAKE,kB,CALF,kB,C7B28FA,gB,C6Bx8FI,Q,CAGF,qB,CAyBF,kB,CACE,oB,CACA,e,CACA,c,CACA,e,CACA,gB,CACA,a,CACA,iB,CACA,wB,CACA,gC,ClBvFE,oB,CkB2FF,kC,C7Bk7FF,kC,CACA,uD,C6Bl7FI,oB,CACA,iB,ClB7FA,mB,CkBgGF,kC,C7Bo7FF,kC,CACA,uD,C6Bp7FI,qB,CACA,iB,ClBlGA,mB,CX2hGJ,uC,C6Bn7FE,oC,CAEE,Y,CAUJ,+BAAA,Y,C7B46FA,uBAAuB,Y,CAKvB,qBAAqB,Y,iBAA+B,iB,CADpD,qBAAqB,Y,WAAyB,W,MAAiB,iB,CAH/D,qBAAqB,iB,CACrB,qBAAqB,4B,CACrB,qBAAqB,6B,CWthGjB,4B,CACA,yB,CkB+GJ,uBAAA,Y,CACE,c,CAEF,+BAAA,a,C7B+6FA,uBAAuB,a,CACvB,qBAAqB,kB,CACrB,qBAAqB,6B,CACrB,qBAAqB,8B,CAErB,qBAAqB,W,iBAA8B,kB,CADnD,qBAAqB,W,WAAwB,a,CWxhGzC,2B,CACA,wB,CkB6GJ,qCAAA,a,CACE,a,CAOF,gB,CAIE,W,CACA,kB,CALF,gB,CASE,qB,CACE,iB,CACA,0B,CACE,gB,CvB5GF,4B,CAAA,2B,CAAA,2B,CuBgHE,S,CAMF,qBAAA,iB,C7Bq6FJ,qBAAqB,uB,C6Bn6Ff,iB,CAIF,qBAAA,kB,C7Bm6FJ,qBAAqB,wB,C6Bj6Ff,S,CACA,gB,C7Bs6FN,qBAAqB,+B,CADrB,qBAAqB,8B,CAErB,qBAAqB,8B,CMtiGjB,qBAAA,yB,CAAA,qBAAA,wB,CAAA,qBAAA,wB,CuBkII,S,CC5KR,e,CACE,iB,CACA,oB,CACA,mB,CACA,c,CAEA,+B,CACE,gB,CAIJ,qB,CACE,iB,CACA,U,CACA,S,CAEA,uD,CACE,U,CACA,wB,CAIF,qD,CAEE,iD,CAGF,sD,CACE,U,CACA,wB,CAKA,wD,CACE,kB,CACA,qB,CAGF,0D,CACE,a,CACA,kB,CASN,yB,CACE,iB,CACA,U,CACA,M,CACA,a,CACA,U,CACA,W,CACA,mB,CACA,wB,CAAA,oB,CAAA,gB,CACA,qB,CACA,2B,CACA,iC,CACA,uB,CASA,0C,CnB9EE,oB,CmBkFF,wE,CACE,uN,CAGF,8E,CACE,wB,CACA,oK,CAUF,uC,CACE,iB,CAGF,qE,CACE,iK,CAWF,wC,CACE,U,CACA,U,CAEA,wD,CACE,a,CAaN,c,CACE,oB,CACA,c,CAEA,yB,CACA,sC,CACA,wB,CACA,a,CACA,qB,CACA,+M,CACA,yB,CACA,wB,CACA,gC,CnBhJE,oB,CmBmJF,oB,CACA,uB,CAEA,oB,CACE,oB,CACA,S,CAGA,+B,CAME,a,CACA,qB,CAIJ,uB,CACE,a,CACA,kB,CACA,wB,CAIF,0B,CACE,S,CAIJ,iB,CACE,mB,CACA,sB,CACA,a,CAaF,Y,CACE,iB,CACA,oB,CACA,c,CACA,a,CACA,c,CAGF,kB,CACE,e,CACA,c,CACA,Q,CACA,uB,CACA,S,CAOF,oB,CACE,iB,CACA,K,CACA,O,CACA,M,CACA,S,CACA,a,CACA,kB,CACA,e,CACA,U,CACA,wB,CAAA,oB,CAAA,gB,CACA,qB,CACA,qB,CnBlOE,oB,CmBuOA,oC,CACE,wB,CAIJ,4B,CACE,iB,CACA,Q,CACA,U,CACA,W,CACA,S,CACA,a,CACA,a,CACA,kB,CACA,e,CACA,U,CACA,qB,CACA,qB,CnBxPA,+B,CmB6PA,qC,CACE,gB,CC7PN,I,CACE,c,CACA,e,CACA,e,CAGF,S,CACE,oB,CzBQE,e,CAAA,e,CyBLA,oB,CAIF,kB,CACE,a,CzBgBA,kB,CAAA,wB,CAAA,wB,CyBbE,a,CACA,kB,CACA,4B,CASJ,qB,CACE,oB,CAGF,+B,C/B6vGF,+B,C+B3vGI,gB,CASJ,S,CACE,4B,ChBjDA,iB,CAAA,gB,CAAA,c,CACE,U,CACA,a,CACA,U,CgBiDF,mB,CACE,U,CAEA,kB,CAEA,6B,CACE,iB,CAIJ,mB,CACE,a,CACA,gB,CACA,4B,CpBxDA,8B,CACA,6B,CLSA,yB,CAAA,yB,CyBkDE,iC,CzBlCF,4B,CAAA,kC,CAAA,kC,CyBuCI,a,CACA,4B,CACA,wB,C/ByvGR,kC,CACA,wC,CACA,wC,CMpyGI,0B,CAAA,gC,CAAA,gC,CyBiDE,a,CACA,qB,CACA,kC,CAIJ,wB,CAEE,e,CpBnFA,yB,CACA,wB,CoBgGF,oB,CACE,U,CAEA,8B,CACE,iB,CAIJ,oB,CACE,a,CACA,gB,CpBjHA,e,CXg2GJ,mC,CACA,yC,CACA,yC,CMl0GI,2B,CAAA,iC,CAAA,iC,CyBwFE,U,CACA,c,CACA,wB,CAMJ,sB,CACE,a,CACA,U,CAEA,gC,CACE,gB,CACA,a,CAYJ,sB,CACE,Y,CAEF,oB,CACE,a,CCrJJ,O,CACE,iB,CACA,kB,ChBsCE,yBgBxCJ,O,CrBDI,sBqBkBJ,Y,CACE,Y,ChBsBE,yBgBvBJ,Y,CrBlBI,iBXi5GJ,oB,CgCt3GA,iB,CAEE,c,CACA,O,CACA,M,CACA,Y,ChBSE,yBhBg3GF,oB,CgC93GF,iB,CrB3BI,iBqBwCJ,iB,CACE,K,CAGF,oB,CACE,Q,CAGF,kB,CACE,e,CACA,K,CACA,Y,CACA,U,ChBXE,yBgBOJ,kB,CrBhDI,iBqBiEJ,a,CACE,U,CACA,kB,CACA,qB,CACA,iB,CACA,iB,CACA,mB,C1BvDE,mB,CAAA,mB,CAAA,qB,CAAA,qB,C0B0DA,oB,CAKJ,e,CAmBA,Y,CAEE,mB,CACA,sB,CAtBF,e,CACE,U,CACA,S,CAGA,iB,CACA,gB,CACA,e,CAEA,uB,CACE,W,CASJ,Y,CACE,oB,CAWF,e,CACE,W,CACA,U,CACA,oB,CACA,iB,CACA,a,CACA,kC,CACA,yB,CACA,4B,CrBtHE,oB,CIHF,kB,CAAA,kB,CAAA,mB,CAAA,mB,CAAA,oB,CAAA,oB,CAAA,4B,CAAA,4B,CAAA,4B,CAAA,4B,CAAA,4B,CACE,U,CACA,a,CACA,U,CCsDA,yBgBiFI,mC,CACE,a,CACA,U,CACA,gB,CACA,c,CAGF,iC,CACE,gB,CACA,mB,CAEA,gD,CACE,e,CACA,Y,AhB3GR,yBgB0FA,qB,CAuBI,e,AhBpGJ,yBgBiFI,mC,CACE,a,CACA,U,CACA,gB,CACA,c,CAGF,iC,CACE,gB,CACA,mB,CAEA,gD,CACE,e,CACA,Y,AhB3GR,yBgB0FA,qB,CAuBI,e,AhBpGJ,yBgBiFI,mC,CACE,a,CACA,U,CACA,gB,CACA,c,CAGF,iC,CACE,gB,CACA,mB,CAEA,gD,CACE,e,CACA,Y,AhB3GR,yBgB0FA,qB,CAuBI,e,AhBpGJ,0BgBiFI,mC,CACE,a,CACA,U,CACA,gB,CACA,c,CAGF,iC,CACE,gB,CACA,mB,CAEA,gD,CACE,e,CACA,Y,AhB3GR,0BgB0FA,qB,CAuBI,eAvBJ,qB,CAuBI,a,CAnBA,mC,CACE,a,CACA,U,CACA,gB,CACA,c,CAGF,iC,CACE,gB,CACA,mB,CAEA,gD,CACE,e,CACA,U,CAmBV,qB,CACE,U,CAGF,qB,CACE,a,CACA,mB,CACA,sB,CAOF,+B,CALE,+B,CACE,gB,CAWJ,2B,ChCm7GF,6B,CgCj7GI,oB,C1B9KA,iC,CAAA,iC,CNmmHJ,mC,CACA,mC,CgCn7GM,oB,CAKF,mC,CACE,oB,C1BvLF,yC,CAAA,yC,C0B0LI,oB,ChCo7GR,2C,CACA,iD,CACA,iD,CAIA,0C,CACA,gD,CACA,gD,CALA,wC,CACA,8C,CACA,8C,CMnmHI,yC,CAAA,+C,CAAA,+C,C0BmLI,oB,CAKN,6B,CACE,oQ,CACA,2B,CAGF,6B,CACE,iC,CAMF,0B,ChC86GF,4B,CgC56GI,U,C1BtNA,gC,CAAA,gC,CNsoHJ,kC,CACA,kC,CgC96GM,U,CAKF,kC,CACE,0B,C1B/NF,wC,CAAA,wC,C0BkOI,2B,ChC+6GR,0C,CACA,gD,CACA,gD,CAIA,yC,CACA,+C,CACA,+C,CALA,uC,CACA,6C,CACA,6C,CMtoHI,wC,CAAA,8C,CAAA,8C,C0B2NI,U,CAKN,4B,CACE,0Q,CACA,iC,CAGF,4B,CACE,uC,ChBhNA,yBgB6NE,2C,CACE,U,CACA,e,AhB5OJ,yBgBuOF,qB,CASI,yB,AhBnOF,yBgB0OE,2C,CACE,U,CACA,e,AhBzPJ,yBgBoPF,qB,CASI,yB,AhBhPF,yBgBuPE,2C,CACE,U,CACA,e,AhBtQJ,yBgBiQF,qB,CASI,yBCnTN,K,CACE,iB,CACA,a,CACA,oB,CACA,qB,CtBJE,oB,CsBOF,iC,CAGF,W,CAEE,e,CAGF,W,CACE,oB,CAGF,c,CACE,mB,CACA,e,CAGF,qB,CACE,e,C3BnBE,gB,C2BgCA,oB,CAGF,qB,CACE,mB,CAMA,0D,CtB1CA,8B,CACA,6B,CsB+CA,wD,CtBlCA,iC,CACA,gC,CsB4CJ,Y,CAEE,sB,CACA,e,CACA,wB,CACA,wC,CAEA,wB,CtBxEE,uD,CsB6EJ,Y,CAEE,sB,CACA,wB,CACA,qC,CAEA,uB,CtBnFE,uD,CsB6FJ,iB,CAEE,qB,CAEA,e,CAGF,kB,CAPA,iB,CAQE,qB,CACA,oB,CAQF,a,CC/GE,wB,CACA,oB,ClCs2HF,yB,CkCp2HE,yB,ClCk1HF,uB,CkCl1HE,uB,ClCg0HF,0B,CkCh0HE,0B,ClCy0HF,0B,CkCz0HE,0B,ClC21HF,0B,CkC31HE,0B,CAEE,4B,CD6GJ,a,CClHE,wB,CACA,oB,CDoHF,U,CCrHE,wB,CACA,oB,CDuHF,a,CCxHE,wB,CACA,oB,CD0HF,Y,CC3HE,wB,CACA,oB,CD+HF,qB,CAGA,uB,CCzHE,4B,CACA,oB,CDwHF,uB,CCxHE,iB,CD2HF,kB,CAGA,qB,CC/HE,4B,CACA,oB,CD8HF,qB,CC9HE,oB,CDoIF,oB,CAHA,qB,CClIE,4B,CACA,oB,CDoIF,oB,CCpIE,oB,ClC+3HF,0B,CkCv3HE,0B,CAEE,iC,ClC23HJ,8B,CAFA,0B,CkCv3HE,0B,ClCw3HF,yB,CkCp3HI,U,ClC23HJ,iD,CkCz3HE,wB,ClCw3HF,4B,CADA,wB,CkCn3HI,2B,C5BhBA,8B,CAAA,8B,C4BoBE,U,CD0HN,gB,CACE,S,CACA,e,CACA,a,CAIF,S,CtBrKI,gC,CsByKJ,iB,CACE,iB,CACA,K,CACA,O,CACA,Q,CACA,M,CACA,e,CAMF,a,CtB/KI,0C,CACA,yC,CsBiLJ,gB,CtBpKI,6C,CACA,4C,CKoBA,yBiBiLA,U,CACE,a,CACA,U,CACA,oB,CACA,kB,CACA,wB,CAEA,gB,CAEE,e,CAIJ,kB,CACE,qB,CACA,oB,CAUJ,W,CAKI,a,CACA,U,CACA,kB,CAzBA,gB,CA4BF,iB,CAII,kB,CACA,kB,CAGF,uB,CACE,a,CACA,a,CAKA,6B,CtB/PJ,4B,CACA,yB,CsBiQM,2C,CACE,yB,CAEF,8C,CACE,4B,CAGJ,4B,CtB3PJ,2B,CACA,wB,CsB6PM,0C,CACE,wB,CAEF,6C,CACE,2B,CAIJ,sBAAA,Y,MAAA,Y,CjCgtHN,sBAAsB,Y,MAAkB,6B,CiC7sHhC,sBAAA,Y,MAAA,0B,CAFA,e,CAkBR,a,CACE,sB,CAAA,mB,CAAA,c,CACA,0B,CAAA,uB,CAAA,kB,CAEA,mB,CACE,oB,CACA,YE9TN,W,CACE,mB,CACA,kB,CACA,e,CACA,wB,CxBAE,oB,CwBKJ,gB,CACE,U,CAGA,yC,CACE,oB,CACA,mB,CACA,kB,CACA,a,CACA,W,CASF,+C,CAIE,oB,CAGF,uB,CACE,a,CCnCJ,W,CACE,oB,CACA,c,CACA,e,CACA,kB,CzBAE,oB,CyBIJ,U,CACE,c,CAGE,iC,CACE,a,CzBkBF,gC,CACA,6B,CyBdA,gC,CzBDA,iC,CACA,8B,CLkBA,4B,CAAA,kC,CAAA,kC,C8BXE,S,CACA,U,CACA,c,CACA,wB,CACA,oB,C9BOF,8B,CAAA,oC,CAAA,oC,C8BDE,a,CACA,mB,CACA,kB,CACA,qB,CACA,iB,CAKN,U,CACE,iB,CACA,U,CACA,oB,CACA,gB,CACA,a,CACA,oB,CACA,qB,CACA,qB,C9BhCE,gB,CAAA,gB,C8BmCA,a,CACA,wB,CACA,iB,CCtDF,yB,CACE,qB,CACA,iB,CAKE,gD,C1BqBF,+B,CACA,4B,C0BjBE,+C,C1BEF,gC,CACA,6B,C0BfF,yB,CACE,sB,CACA,iB,CAKE,gD,C1BqBF,+B,CACA,4B,C0BjBE,+C,C1BEF,gC,CACA,6B,C2BbJ,I,CACE,oB,CACA,kB,CACA,a,CACA,e,CACA,a,CACA,U,CACA,iB,CACA,kB,CACA,uB,C3BVE,oB,C2BcF,U,CACE,Y,CAKJ,S,CACE,iB,CACA,Q,ChCNE,W,CAAA,W,CgCaA,U,CACA,oB,CACA,c,CASJ,S,CACE,kB,CACA,iB,C3B1CE,mB,C2BkDJ,Y,CCnDE,wB,CjCiBE,wB,CAAA,wB,CiCbE,wB,CDmDN,Y,CCvDE,wB,CjCiBE,wB,CAAA,wB,CiCbE,wB,CDuDN,Y,CC3DE,wB,CjCiBE,wB,CAAA,wB,CiCbE,wB,CD2DN,S,CC/DE,wB,CjCiBE,qB,CAAA,qB,CiCbE,wB,CD+DN,Y,CCnEE,wB,CjCiBE,wB,CAAA,wB,CiCbE,wB,CDmEN,W,CCvEE,wB,CjCiBE,uB,CAAA,uB,CiCbE,wB,CCPN,U,CACE,iB,CACA,kB,CACA,wB,C7BCE,mB,CKyCA,yBwB7CJ,U,CAOI,mBAIJ,a,CACE,wB,CAGF,gB,CACE,e,CACA,c,C7BbE,e,C8BAJ,M,CACE,sB,CACA,kB,CACA,4B,C9BHE,oB,C8BQJ,c,CAEE,a,CAIF,W,CACE,e,CAQF,kB,CACE,oB,CAGA,yB,CACE,iB,CACA,Y,CACA,c,CACA,a,CASJ,c,CCzCE,wB,CACA,oB,CACA,a,CAEA,iB,CACE,wB,CAEF,0B,CACE,a,CDoCJ,W,CC5CE,wB,CACA,oB,CACA,a,CAEA,c,CACE,wB,CAEF,uB,CACE,a,CDuCJ,c,CC/CE,wB,CACA,oB,CACA,a,CAEA,iB,CACE,wB,CAEF,0B,CACE,a,CD0CJ,a,CClDE,wB,CACA,oB,CACA,a,CAEA,gB,CACE,wB,CAEF,yB,CACE,a,CzCGJ,O,CAAA,S,CAAA,M,CACE,a,CACA,U,CACA,W,CACA,kB,CAEF,gB,CAAA,c,CAAA,a,CAEE,qB,CAEA,Q,CAEA,uB,CAAA,e,CUtBE,oB,CV4BJ,0B,CAAA,wB,CAAA,uB,CACE,wB,CAEA,Q,CAEF,mC,CAAA,iC,CAAA,gC,CACE,wB,CUPE,gC,CACA,6B,CVSJ,wC,CAAA,sC,CAAA,qC,CACE,wB,CUXE,gC,CACA,6B,CVcJ,yC,CAAA,uC,CAAA,sC,CU7BI,iC,CACA,8B,CV+BJ,8C,CAAA,4C,CAAA,2C,CUhCI,iC,CACA,8B,CVoCJ,sC,CAAA,oC,CAAA,mC,CACE,qB,CUnDE,oB,CX41IJ,gB,CACA,c,CACA,a,CCvyIA,uB,CAEE,qB,CUzDE,oB,CV+DJ,mCACE,O,CAAA,S,CAAA,M,CACE,qB,CUjEA,oB,CVqEF,a,CACE,oB,CACA,W,CACA,mB,CACA,wB,CU9CA,gC,CACA,6B,CVgDF,uB,CAAA,qB,CAAA,oB,CU/DE,iC,CACA,gCVwEJ,gD,C0CjDE,iL,C1CmDA,yB,CAEF,2C,C0CrDE,iL,C1CuDA,yB,CAEF,kC,C0CzDE,iL,C1C2DA,yB,CAGF,mCACE,qB,C0C/DA,iL,C1CiEE,2BASJ,iD,CACE,yD,CAAA,iD,CAEF,4C,CACE,iD,CAGF,mCACE,wC,CACE,yD,CAAA,mD2CzHF,gD,CACE,wB,CAGF,2C,CACE,wB,CAIF,kC,CACE,wB,CAIF,mCACE,+B,CACE,0BAhBJ,6C,CACE,wB,CAGF,wC,CACE,wB,CAIF,+B,CACE,wB,CAIF,mCACE,4B,CACE,0BAhBJ,gD,CACE,wB,CAGF,2C,CACE,wB,CAIF,kC,CACE,wB,CAIF,mCACE,+B,CACE,0BAhBJ,+C,CACE,wB,CAGF,0C,CACE,wB,CAIF,iC,CACE,wB,CAIF,mCACE,8B,CACE,0BCLJ,M,C7C48IF,W,C6C18II,e,CAEF,W,CACE,a,C7Ci9IJ,W,C6C/8IE,W,C7C88IF,Y,C6C38II,kB,CACA,kB,CAEF,a,CACE,qB,CAEF,a,CACE,qB,CASJ,a,CACE,a,CAGA,2B,CACE,c,CASJ,Y,CACE,iB,CAGF,W,CACE,kB,CAQF,c,CACE,Y,CACA,iB,CAQF,W,CACE,c,CACA,e,CC3EF,W,CAEE,c,CACA,e,CAQF,gB,CACE,iB,CACA,a,CACA,sB,CAEA,kB,CACA,qB,CACA,qB,CAEA,4B,CnCdE,8B,CACA,6B,CmCiBF,2B,CACE,e,CnCLA,iC,CACA,gC,CLWA,yB,CAAA,+B,CAAA,+B,CwCDE,a,CACA,kB,CACA,wB,CAGA,kD,CAAA,wD,CAAA,wD,CACE,a,CAEF,+C,CAAA,qD,CAAA,qD,CACE,a,CxCRJ,uB,CAAA,6B,CAAA,6B,CwCeE,S,CACA,U,CACA,oB,CACA,wB,CACA,oB,CAGA,gD,C9C0/IN,uD,CADA,sD,CAC2D,sD,CAE3D,6D,CADA,4D,CACiE,sD,CAEjE,6D,CADA,4D,C8C1/IQ,a,CAEF,6C,CAAA,mD,CAAA,mD,CACE,a,CAON,kC,CACE,c,CACA,a,CACA,e,CAUJ,uB,CACE,U,CACA,U,CACA,kB,CAEA,gD,CACE,U,CxCtEA,6B,CAAA,6B,CwC2EA,U,CACA,oB,CACA,wB,CC9FF,wB,CACE,a,CACA,wB,CAGF,yB,C/CilJF,8B,C+C/kJI,a,CAEA,iD,CAAA,+C,CAAA,kD,CAAA,kD,C/CqqJJ,sD,CAxDA,oD,CA5BA,uD,CAwDA,uD,C+CxoJM,a,CzCOF,+B,CAAA,+B,CN6kJJ,oC,CACA,oC,C+CjlJM,a,CACA,wB,CzCkBF,gC,CAAA,sC,CAAA,sC,CNmkJJ,qC,CACA,2C,CACA,2C,C+CllJQ,U,CACA,wB,CACA,oB,CAtBN,qB,CACE,a,CACA,wB,CAGF,sB,C/C6mJF,2B,C+C3mJI,a,CzCUA,4B,CAAA,4B,CNymJJ,iC,CACA,iC,C+C7mJM,a,CACA,wB,CzCkBF,6B,CAAA,mC,CAAA,mC,CN+lJJ,kC,CACA,wC,CACA,wC,C+C9mJQ,U,CACA,wB,CACA,oB,CAtBN,wB,CACE,a,CACA,wB,CAGF,yB,C/CyoJF,8B,C+CvoJI,a,CzCUA,+B,CAAA,+B,CNqoJJ,oC,CACA,oC,C+CzoJM,a,CACA,wB,CzCkBF,gC,CAAA,sC,CAAA,sC,CN2nJJ,qC,CACA,2C,CACA,2C,C+C1oJQ,U,CACA,wB,CACA,oB,CAtBN,uB,CACE,a,CACA,wB,CAGF,wB,C/CqqJF,6B,C+CnqJI,a,CzCUA,8B,CAAA,8B,CNiqJJ,mC,CACA,mC,C+CrqJM,a,CACA,wB,CzCkBF,+B,CAAA,qC,CAAA,qC,CNupJJ,oC,CACA,0C,CACA,0C,C+CtqJQ,U,CACA,wB,CACA,oB,CD4FR,wB,CACE,Y,CACA,iB,CAEF,qB,CACE,e,CACA,e,CEzHF,iB,CACE,iB,CACA,a,CACA,Q,CACA,S,CACA,e,CAEA,wC,ChD6sJF,uB,CADA,wB,CAEA,wB,CACA,uB,CgD1sJI,iB,CACA,K,CACA,Q,CACA,M,CACA,U,CACA,W,CACA,Q,CAIJ,uB,CACE,6B,CAGF,uB,CACE,qB,CAGF,sB,CACE,kB,CAGF,sB,CACE,mB,CCrCF,M,CACE,W,CACA,gB,CACA,e,CACA,a,CACA,U,CACA,wB,CACA,U,C3CaE,Y,CAAA,Y,C2CVA,U,CACA,oB,CACA,c,CACA,U,CAUJ,Y,CACE,S,CACA,c,CACA,c,CACA,Q,CACA,uB,CChBF,M,CALA,W,CACE,e,CAIF,M,CACE,c,CACA,K,CACA,O,CACA,Q,CACA,M,CACA,Y,CACA,Y,CAIA,S,CAMA,yB,CACE,iC,CAAA,gE,CACA,mC,CAAA,2B,CAEF,uB,CAAqB,gC,CAAA,wB,CAEvB,kB,CACE,iB,CACA,e,CAIF,a,CACE,iB,CACA,U,CACA,W,CAIF,c,CACE,iB,CACA,qB,CACA,2B,CACA,+B,CvChDE,mB,CuCoDF,S,CAIF,e,CACE,c,CACA,K,CACA,O,CACA,Q,CACA,M,CACA,Y,CACA,qB,CAGA,oB,CAAS,S,CACT,kB,CAAO,U,CAKT,a,CACE,Y,CACA,+B,CAIF,oB,CACE,e,CAIF,Y,CACE,Q,CACA,e,CAKF,W,CACE,iB,CACA,Y,CAIF,a,CACE,Y,CACA,gB,CACA,4B,CAKF,wB,CACE,iB,CACA,W,CACA,U,CACA,W,CACA,e,ClCpEE,yBkC0EF,a,CACE,e,CACA,gB,CAOF,S,CAAY,iB,AlCnFV,yBkCuFF,S,CAAY,iBCnId,Q,CACE,iB,CACA,Y,CACA,a,CCHA,gG,CAEA,iB,CACA,e,CACA,qB,CACA,e,CACA,e,CACA,e,CACA,gB,CACA,oB,CACA,gB,CACA,mB,CACA,kB,CACA,iB,CACA,mB,CDPA,iB,CAEA,oB,CACA,S,CAEA,W,CAAO,U,CAEP,0C,CAAA,oB,CAEE,a,CACA,e,CAEA,iE,CAAA,2C,CACE,Q,CACA,Q,CACA,gB,CACA,U,CACA,sB,CACA,qB,CAGJ,wC,CAAA,sB,CAEE,a,CACA,e,CAEA,+D,CAAA,6C,CACE,O,CACA,M,CACA,e,CACA,U,CACA,0B,CACA,uB,CAGJ,uC,CAAA,uB,CAEE,a,CACA,c,CAEA,8D,CAAA,8C,CACE,K,CACA,Q,CACA,gB,CACA,U,CACA,sB,CACA,wB,CAGJ,yC,CAAA,qB,CAEE,a,CACA,gB,CAEA,gE,CAAA,4C,CACE,O,CACA,O,CACA,e,CACA,U,CACA,0B,CACA,sB,CAMN,c,CACE,e,CACA,e,CACA,U,CACA,iB,CACA,qB,CxC3EE,oB,CwC8EF,sB,CACE,iB,CACA,O,CACA,Q,CACA,wB,CACA,kB,CEvFJ,Q,CACE,iB,CACA,K,CACA,M,CACA,Y,CACA,a,CACA,e,CACA,W,CDNA,gG,CAEA,iB,CACA,e,CACA,qB,CACA,e,CACA,e,CACA,e,CACA,gB,CACA,oB,CACA,gB,CACA,mB,CACA,kB,CACA,iB,CACA,mB,CCJA,iB,CAEA,oB,CACA,qB,CACA,2B,CACA,+B,C1CZE,mB,C0CmBF,0C,CAAA,oB,CAEE,gB,CAEA,iD,CAAA,kD,CAAA,2B,CAAA,4B,CAEE,Q,CACA,qB,CAGF,kD,CAAA,4B,CACE,Y,CACA,iB,CACA,gC,CAGF,iD,CAAA,2B,CACE,Y,CACA,iB,CACA,qB,CAIJ,wC,CAAA,sB,CAEE,gB,CAEA,+C,CAAA,gD,CAAA,6B,CAAA,8B,CAEE,O,CACA,mB,CAGF,gD,CAAA,8B,CACE,U,CACA,gB,CACA,kC,CAGF,+C,CAAA,6B,CACE,U,CACA,gB,CACA,uB,CAIJ,uC,CAAA,uB,CAEE,e,CAEA,8C,CAAA,+C,CAAA,8B,CAAA,+B,CAEE,Q,CACA,kB,CAGF,+C,CAAA,+B,CACE,S,CACA,iB,CACA,mC,CAGF,8C,CAAA,8B,CACE,S,CACA,iB,CACA,2B,CAIF,8D,CAAA,8C,CACE,iB,CACA,K,CACA,Q,CACA,a,CACA,U,CACA,iB,CACA,U,CACA,+B,CAIJ,yC,CAAA,qB,CAEE,iB,CAEA,gD,CAAA,iD,CAAA,4B,CAAA,6B,CAEE,O,CACA,oB,CAGF,iD,CAAA,6B,CACE,W,CACA,gB,CACA,iC,CAGF,gD,CAAA,4B,CACE,W,CACA,gB,CACA,sB,CAON,c,CACE,gB,CACA,Q,CACA,c,CACA,wB,CACA,+B,C1CnIE,mC,C0CuIF,oB,CACE,Y,CAIJ,gB,CACE,gB,CrDw8JF,e,CqDh8JA,gB,CAEE,iB,CACA,a,CACA,O,CACA,Q,CACA,wB,CACA,kB,CAGF,gB,CACE,U,CACA,iB,CAEF,e,CACE,U,CACA,iB,CCxKF,S,CAIA,e,CAHE,iB,CAGF,e,CAEE,U,CACA,e,CAEA,8B,CACE,iB,CACA,Y,CACA,+B,CtD8mKJ,oC,CsD3mKI,kC,CAGE,a,CAIF,qDAbF,8B,CAcI,oC,CAAA,sE,CACA,kC,CAAA,0B,CACA,0B,CAAA,kB,CAEA,2C,CAAA,mC,CAEE,M,CACA,uC,CAAA,+B,CAEF,0C,CAAA,mC,CAEE,M,CACA,wC,CAAA,gC,CAEF,qC,CAAA,wC,CAAA,yC,CAGE,M,CACA,oC,CAAA,8BAKN,uB,CtD0mKF,qB,CACA,qB,CsDxmKI,a,CAGF,uB,CAiBA,0B,CtDumKF,2B,CsDvnKI,M,CAkCJ,iB,CA/BE,qB,CtDwmKF,qB,CsDtmKI,iB,CACA,K,CACA,U,CAGF,qB,CACE,S,CAUF,4B,CARA,qB,CACE,U,CAUF,6B,CACE,S,CASJ,iB,CAGE,Q,CACA,M,CACA,S,CACA,c,CACA,U,CACA,iB,CACA,oC,CACA,U,CAKA,sB,CXhGA,mF,CACA,0B,CACA,qH,CWiGA,uB,CACE,O,CACA,S,CXrGF,mF,CACA,0B,CACA,qH,CrCWE,uB,CAAA,uB,CgD8FA,U,CACA,oB,CACA,S,CACA,U,CtDimKJ,4B,CsD7lKE,4B,CAEE,iB,CACA,O,CACA,S,CACA,oB,CACA,U,CACA,W,CACA,gB,CACA,iB,CACA,a,CAEF,4B,CACE,Q,CACA,iB,CAEF,4B,CACE,S,CACA,kB,CAIA,oC,CACE,W,CAIF,oC,CACE,W,CAWN,oB,CACE,iB,CACA,W,CACA,Q,CACA,U,CACA,S,CACA,c,CACA,gB,CACA,iB,CACA,e,CAEA,uB,CACE,oB,CACA,U,CACA,W,CACA,U,CACA,kB,CACA,c,CAMA,4B,CACA,qB,CACA,kB,CAGF,4B,CACE,U,CACA,W,CACA,Q,CACA,qB,CASJ,iB,CACE,iB,CACA,S,CACA,W,CACA,Q,CACA,U,CACA,gB,CACA,mB,CACA,U,CACA,iB,CACA,oC,CAEA,sB,CACE,gB,CtCzKA,yBhBkvKF,4B,CsD7jKE,4B,CAEE,U,CACA,W,CACA,gB,CACA,c,CAEF,4B,CACE,iB,CAEF,4B,CACE,kB,CAKJ,iB,CACE,S,CACA,Q,CACA,mB,CAIF,oB,CACE,aC1PJ,e,CAAkB,iC,CAClB,U,CAAa,4B,CACb,a,CAAgB,+B,CAChB,a,CAAgB,+B,CAChB,kB,CAAqB,oC,CACrB,e,CAAkB,iC,CCDlB,S,CACE,wB,CCFA,W,CACE,kC,CnDgBA,kB,CAAA,kB,CmDZE,kC,CALJ,W,CACE,kC,CnDgBA,kB,CAAA,kB,CmDZE,kC,CALJ,Q,CACE,kC,CnDgBA,e,CAAA,e,CmDZE,kC,CALJ,W,CACE,kC,CnDgBA,kB,CAAA,kB,CmDZE,kC,CALJ,U,CACE,kC,CnDgBA,iB,CAAA,iB,CmDZE,kC,CALJ,W,CACE,kC,CnDgBA,kB,CAAA,kB,CmDZE,kC,CCGN,Q,C/CPI,oB,C+CaJ,c,CAHA,Y,C/CII,8B,C+CJJ,Y,C/CHI,6B,C+CMJ,c,C/CAI,iC,C+CGJ,e,CAGA,a,C/CQI,gC,C+CXJ,e,C/CII,iC,C+CDJ,a,C/CSI,6B,C+CLJ,e,CACE,iB,C3C3BA,gB,CACE,U,CACA,a,CACA,U,C4CAJ,Q,CACE,uB,CAEF,e,CACE,8B,CAEF,S,CACE,wB,CCTE,c,CCDF,oB,CDIE,e,CCDF,qB,CDIE,c,CACE,oB,C5CoCF,yB4C3CA,c,CCDF,oB,CDIE,e,CCDF,qB,CDIE,c,CACE,sB,A5CoCF,yB4C3CA,c,CCDF,oB,CDIE,e,CCDF,qB,CDIE,c,CACE,sB,A5CoCF,yB4C3CA,c,CCDF,oB,CDIE,e,CCDF,qB,CDIE,c,CACE,sB,A5CoCF,0B4C3CA,c,CCDF,oB,CDIE,e,CCDF,qB,CDIE,c,CACE,sBELN,Q,CCCE,iB,CACA,S,CACA,U,CACA,S,CACA,W,CACA,e,CACA,kB,CACA,Q,CAUA,yB,CAAA,wB,CAEE,e,CACA,U,CACA,W,CACA,Q,CACA,gB,CACA,S,CC3BJ,M,CAAS,oB,CACT,M,CAAS,qB,CAIT,Q,CACE,2B,CACA,0B,CAQE,I,CAAuB,kB,CACvB,K,CAAwB,sB,CACxB,K,CAAwB,wB,CACxB,K,CAAwB,yB,CACxB,K,CAGA,K,CAHwB,uB,CAGxB,K,CACE,wB,CAGF,K,CACE,sB,CACA,yB,CAbF,I,CAAuB,qB,CACvB,K,CAAwB,yB,CACxB,K,CAAwB,2B,CACxB,K,CAAwB,4B,CACxB,K,CAGA,K,CAHwB,0B,CAGxB,K,CACE,2B,CAGF,K,CACE,yB,CACA,4B,CAbF,I,CAAuB,uB,CACvB,K,CAAwB,2B,CACxB,K,CAAwB,6B,CACxB,K,CAAwB,8B,CACxB,K,CAGA,K,CAHwB,4B,CAGxB,K,CACE,6B,CAGF,K,CACE,2B,CACA,8B,CAbF,I,CAAuB,qB,CACvB,K,CAAwB,yB,CACxB,K,CAAwB,2B,CACxB,K,CAAwB,4B,CACxB,K,CAGA,K,CAHwB,0B,CAGxB,K,CACE,2B,CAGF,K,CACE,yB,CACA,4B,CAbF,I,CAAuB,mB,CACvB,K,CAAwB,uB,CACxB,K,CAAwB,yB,CACxB,K,CAAwB,0B,CACxB,K,CAGA,K,CAHwB,wB,CAGxB,K,CACE,yB,CAGF,K,CACE,uB,CACA,0B,CAbF,I,CAAuB,sB,CACvB,K,CAAwB,0B,CACxB,K,CAAwB,4B,CACxB,K,CAAwB,6B,CACxB,K,CAGA,K,CAHwB,2B,CAGxB,K,CACE,4B,CAGF,K,CACE,0B,CACA,6B,CAbF,I,CAAuB,wB,CACvB,K,CAAwB,4B,CACxB,K,CAAwB,8B,CACxB,K,CAAwB,+B,CACxB,K,CAGA,K,CAHwB,6B,CAGxB,K,CACE,8B,CAGF,K,CACE,4B,CACA,+B,CAbF,I,CAAuB,sB,CACvB,K,CAAwB,0B,CACxB,K,CAAwB,4B,CACxB,K,CAAwB,6B,CACxB,K,CAGA,K,CAHwB,2B,CAGxB,K,CACE,4B,CAGF,K,CACE,0B,CACA,6B,CAON,Q,CACE,c,CACA,K,CACA,O,CACA,M,CACA,Y,CCpCF,a,CAAuB,4B,CACvB,Y,CAAuB,4B,CACvB,c,CCJE,e,CACA,sB,CACA,kB,CDQE,a,CAA8B,yB,CAC9B,c,CAA8B,0B,CAC9B,e,CAA8B,2B,CjD6B9B,yBiD/BA,a,CAA8B,yB,CAC9B,c,CAA8B,0B,CAC9B,e,CAA8B,6B,AjD6B9B,yBiD/BA,a,CAA8B,yB,CAC9B,c,CAA8B,0B,CAC9B,e,CAA8B,6B,AjD6B9B,yBiD/BA,a,CAA8B,yB,CAC9B,c,CAA8B,0B,CAC9B,e,CAA8B,6B,AjD6B9B,0BiD/BA,a,CAA8B,yB,CAC9B,c,CAA8B,0B,CAC9B,e,CAA8B,6BAMlC,e,CAAuB,kC,CACvB,e,CAAuB,kC,CACvB,gB,CAAuB,mC,CAIvB,mB,CAAuB,e,CACvB,iB,CAAuB,e,CACvB,Y,CAAuB,iB,CAIvB,W,CACE,oB,CEhCA,W,CnEm2LF,iB,CACA,sB,CAHA,e,CmEj2LE,gB,CnEg2LF,kB,CAEA,mB,CAHA,iB,CmE/1LE,kB,CACE,uB,C7DgBA,kB,CN61L2B,kB,CAD/B,wB,CAMA,wB,CALA,6B,CAMA,6B,CATA,sB,CAMA,sB,CMh2LI,uB,CN61L0E,uB,CAJ9E,yB,CAMA,yB,CAJA,0B,CAMA,0B,CATA,wB,CAMA,wB,CM91LI,yB,CN61L+C,yB,CmEz2L7C,uB,CALJ,a,CAAA,kB,CACE,uB,C7DgBA,oB,CAAA,oB,CAAA,yB,CAAA,yB,C6DZE,uB,CALJ,a,CAAA,sB,CAAA,qB,CAAA,gB,CAAA,gB,CAAA,a,CAAA,mB,CAAA,kB,CACE,uB,C7DgBA,oB,CAAA,oB,CAAA,6B,CAAA,6B,CAAA,4B,CAAA,4B,CAAA,uB,CAAA,uB,CAAA,uB,CAAA,uB,CAAA,oB,CAAA,oB,CAAA,0B,CAAA,0B,CAAA,yB,CAAA,yB,C6DZE,uB,CALJ,U,CAAA,gB,CAAA,kB,CAAA,qB,CAAA,oB,CACE,uB,C7DgBA,iB,CAAA,iB,CAAA,uB,CAAA,uB,CAAA,yB,CAAA,yB,CAAA,4B,CAAA,4B,CAAA,2B,CAAA,2B,C6DZE,uB,CALJ,a,CAAA,a,CAAA,kB,CAAA,uB,CAAA,a,CAAA,gB,CAAA,e,CACE,uB,C7DgBA,oB,CAAA,oB,CAAA,oB,CAAA,oB,CAAA,yB,CAAA,yB,CAAA,8B,CAAA,8B,CAAA,oB,CAAA,oB,CAAA,uB,CAAA,uB,CAAA,sB,CAAA,sB,C6DZE,uB,CALJ,Y,CAAA,yB,CAAA,c,CAAA,e,CAAA,oB,CAAA,kB,CAAA,iB,CACE,uB,C7DgBA,mB,CAAA,mB,CAAA,gC,CAAA,gC,CAAA,qB,CAAA,qB,CAAA,sB,CAAA,sB,CAAA,2B,CAAA,2B,CAAA,yB,CAAA,yB,CAAA,wB,CAAA,wB,C6DZE,uB,CALJ,e,CACE,uB,C7DgBA,sB,CAAA,sB,C6DZE,uB,CFgDN,U,CGtDE,U,CACA,iB,CACA,gB,CACA,4B,CACA,Q,CCFF,U,CACE,2B,CAMA,a,CAEI,sB,CrD6CF,yBqD1CF,e,CAEI,wB,ArD2BF,yBqDlCF,a,CAEI,wB,ArD6CF,yBqD1CF,e,CAEI,wB,ArD2BF,yBqDlCF,a,CAEI,wB,ArD6CF,yBqD1CF,e,CAEI,wB,ArD2BF,yBqDlCF,a,CAEI,wB,ArD6CF,0BqD1CF,e,CAEI,wB,ArD2BF,0BqDlCF,a,CAEI,wBAGJ,e,CAYF,oB,CAVM,sB,CAaJ,aAHF,oB,CAII,yBAGJ,qB,CACE,sB,CAEA,aAHF,qB,CAII,0BAGJ,2B,CACE,sB,CAEA,aAHF,2B,CAII,8B,CAIJ,a,CAEI,wBCpCJ,e,CACE,0F;;;;;ACJF,2BACE,E,CACE,8B,CACQ,sB,CAEV,E,CACE,gC,CACQ,0B,AAIZ,mBACE,E,CACE,8B,CACQ,sB,CAEV,E,CACE,gC,CACQ,0B,AC5BZ,WACE,yB,CACA,0C,CACA,+T,CAMA,e,CACA,kBCVF,G,CAAA,U,CAAA,Y,CAAA,iB,CAAA,e,CAAA,gB,CAAA,e,CAAA,uB,CAAA,c,CAAA,sB,CAAA,yB,CAAA,Y,CAAA,oB,CAAA,Y,CAAA,c,CAAA,e,CAAA,qB,CAAA,Y,CAAA,a,CAAA,e,CAAA,c,CAAA,iB,CAAA,e,CAAA,c,CAAA,qB,CAAA,mB,CAAA,e,CAAA,oB,CAAA,iB,CAAA,qB,CAAA,kB,CAAA,iB,CAAA,gB,CAAA,kB,CAAA,+B,CAAA,Y,CAAA,wB,CAAA,iB,CAAA,e,CAAA,e,CAAA,qB,CAAA,e,CAAA,a,CAAA,gB,CAAA,kB,CAAA,iB,CAAA,0B,CAAA,mB,CAAA,qB,CAAA,a,CAAA,e,CAAA,iB,CAAA,a,CAAA,gB,CAAA,c,CAAA,e,CAAA,c,CAAA,kB,CAAA,mB,CAAA,iB,CAAA,e,CAAA,a,CAAA,c,CAAA,gB,CAAA,Y,CAAA,e,CAAA,sB,CAAA,e,CAAA,gB,CAAA,e,CAAA,e,CAAA,Y,CAAA,Y,CAAA,a,CAAA,c,CAAA,e,CAAA,e,CAAA,a,CAAA,e,CAAA,a,CAAA,kB,CAAA,oB,CAAA,qB,CAAA,sB,CAAA,mB,CAAA,gC,CAAA,oB,CAAA,0B,CAAA,oB,CAAA,oB,CAAA,sB,CAAA,iB,CAAA,0B,CAAA,oB,CAAA,2B,CAAA,qB,CAAA,mB,CAAA,kB,CAAA,mB,CAAA,qB,CAAA,e,CAAA,a,CAAA,c,CAAA,a,CAAA,e,CAAA,W,CAAA,a,CAAA,a,CAAA,gB,CAAA,c,CAAA,mB,CAAA,gB,CAAA,a,CAAA,a,CAAA,e,CAAA,mB,CAAA,oB,CAAA,iC,CAAA,wB,CAAA,6B,CAAA,4B,CAAA,4B,CAAA,6B,CAAA,sB,CAAA,uB,CAAA,8B,CAAA,gC,CAAA,6B,CAAA,qC,CAAA,kB,CAAA,iB,CAAA,kB,CAAA,sB,CAAA,2B,CAAA,2B,CAAA,qB,CAAA,iB,CAAA,wB,CAAA,yB,CAAA,oB,CAAA,oB,CAAA,0B,CAAA,0B,CAAA,sB,CAAA,2B,CAAA,6B,CAAA,6B,CAAA,2B,CAAA,8B,CAAA,8B,CAAA,4B,CAAA,qB,CAAA,oB,CAAA,iB,CAAA,oB,CAAA,gB,CAAA,oB,CAAA,c,CAAA,sB,CAAA,4B,CAAA,Y,CAAA,e,CAAA,gB,CAAA,2B,CAAA,mB,CAAA,sB,CAAA,qB,CAAA,qB,CAAA,gC,CAAA,0B,CAAA,oB,CAAA,sB,CAAA,qB,CAAA,uB,CAAA,a,CAAA,uB,CAAA,qB,CAAA,oB,CAAA,e,CAAA,Y,CAAA,e,CAAA,iB,CAAA,e,CAAA,mB,CAAA,qB,CAAA,e,CAAA,a,CAAA,a,CAAA,4B,CAAA,4B,CAAA,mB,CAAA,gB,CAAA,iB,CAAA,oB,CAAA,c,CAAA,Y,CAAA,Y,CAAA,e,CAAA,gB,CAAA,e,CAAA,e,CAAA,mB,CAAA,c,CAAA,c,CAAA,qB,CAAA,iB,CAAA,gB,CAAA,gB,CAAA,yB,CAAA,Y,CAAA,qB,CAAA,gB,CAAA,a,CAAA,c,CAAA,iB,CAAA,e,CAAA,qB,CAAA,iB,CAAA,kB,CAAA,c,CAAA,iB,CAAA,gB,CAAA,+B,CAAA,wB,CAAA,wB,CAAA,gB,CAAA,uB,CAAA,a,CAAA,W,CAAA,mB,CAAA,0B,CAAA,kB,CAAA,kB,CAAA,mB,CAAA,yB,CAAA,yB,CAAA,kB,CAAA,gB,CAAA,gB,CAAA,gB,CAAA,gB,CAAA,a,CAAA,kB,CAAA,a,CAAA,a,CAAA,oB,CAAA,qB,CAAA,kB,CAAA,iB,CAAA,e,CAAA,a,CAAA,mB,CAAA,kB,CAAA,oB,CAAA,c,CAAA,a,CAAA,e,CAAA,a,CAAA,gB,CAAA,uB,CAAA,e,CAAA,qB,CAAA,uB,CAAA,gB,CAAA,e,CAAA,a,CAAA,oB,CAAA,2B,CAAA,mB,CAAA,mB,CAAA,oB,CAAA,0B,CAAA,0B,CAAA,mB,CAAA,a,CAAA,oB,CAAA,W,CAAA,gB,CAAA,iB,CAAA,yB,CAAA,mB,CAAA,gB,CAAA,2B,CAAA,kB,CAAA,kB,CAAA,iB,CAAA,sB,CAAA,wB,CAAA,0B,CAAA,kB,CAAA,oB,CAAA,mB,CAAA,e,CAAA,iB,CAAA,kB,CAAA,kB,CAAA,yB,CAAA,mB,CAAA,iB,CAAA,oB,CAAA,iB,CAAA,gB,CAAA,mB,CAAA,qB,CAAA,0B,CAAA,gB,CAAA,wB,CACE,oB,CACA,uB,CACA,iB,CACA,mB,CACA,kC,CACA,iC,CCLF,M,CACE,wB,CACA,iB,CACA,mB,CAEF,M,CAAwB,a,CACxB,M,CAAwB,a,CACxB,M,CAAwB,a,CACxB,M,CAAwB,a,CCVxB,M,CACE,oB,CACA,iB,CCDF,M,CACE,c,CACA,0B,CACA,oB,CACA,S,CAAO,iB,CAET,M,CACE,iB,CACA,oB,CACA,oB,CACA,iB,CACA,iB,CACA,Y,CACE,oB,CCbJ,U,CACE,wB,CACA,uB,CACA,kB,CAGF,a,CAA+B,U,CAC/B,c,CAQA,W,CARgC,W,CAG9B,uB,CAAA,yB,CAAA,8B,CAAA,4B,CAAA,6B,CAAA,4B,CAAA,oC,CAAA,2B,CAAA,mC,CAAA,sC,CAAA,yB,CAAA,iC,CAAA,yB,CAAA,2B,CAAA,4B,CAAA,kC,CAAA,yB,CAAA,0B,CAAA,4B,CAAA,2B,CAAA,8B,CAAA,4B,CAAA,2B,CAAA,kC,CAAA,gC,CAAA,4B,CAAA,iC,CAAA,8B,CAAA,kC,CAAA,+B,CAAA,8B,CAAA,6B,CAAA,+B,CAAA,4C,CAAA,yB,CAAA,qC,CAAA,8B,CAAA,4B,CAAA,4B,CAAA,kC,CAAA,4B,CAAA,0B,CAAA,6B,CAAA,+B,CAAA,8B,CAAA,uC,CAAA,gC,CAAA,kC,CAAA,0B,CAAA,4B,CAAA,8B,CAAA,0B,CAAA,6B,CAAA,2B,CAAA,4B,CAAA,2B,CAAA,+B,CAAA,gC,CAAA,8B,CAAA,4B,CAAA,0B,CAAA,2B,CAAA,6B,CAAA,yB,CAAA,4B,CAAA,mC,CAAA,4B,CAAA,6B,CAAA,4B,CAAA,4B,CAAA,yB,CAAA,yB,CAAA,0B,CAAA,2B,CAAA,4B,CAAA,4B,CAAA,0B,CAAA,4B,CAAA,0B,CAAA,+B,CAAA,iC,CAAA,kC,CAAA,mC,CAAA,gC,CAAA,6C,CAAA,iC,CAAA,uC,CAAA,iC,CAAA,iC,CAAA,mC,CAAA,8B,CAAA,uC,CAAA,iC,CAAA,wC,CAAA,kC,CAAA,gC,CAAA,+B,CAAA,gC,CAAA,kC,CAAA,4B,CAAA,0B,CAAA,2B,CAAA,0B,CAAA,4B,CAAA,wB,CAAA,0B,CAAA,0B,CAAA,6B,CAAA,2B,CAAA,gC,CAAA,6B,CAAA,0B,CAAA,0B,CAAA,4B,CAAA,gC,CAAA,iC,CAAA,8C,CAAA,qC,CAAA,0C,CAAA,yC,CAAA,yC,CAAA,0C,CAAA,mC,CAAA,oC,CAAA,2C,CAAA,6C,CAAA,0C,CAAA,kD,CAAA,+B,CAAA,8B,CAAA,+B,CAAA,mC,CAAA,wC,CAAA,wC,CAAA,kC,CAAA,8B,CAAA,qC,CAAA,sC,CAAA,iC,CAAA,iC,CAAA,uC,CAAA,uC,CAAA,mC,CAAA,wC,CAAA,0C,CAAA,0C,CAAA,wC,CAAA,2C,CAAA,2C,CAAA,yC,CAAA,kC,CAAA,iC,CAAA,8B,CAAA,iC,CAAA,6B,CAAA,iC,CAAA,2B,CAAA,mC,CAAA,yC,CAAA,yB,CAAA,4B,CAAA,6B,CAAA,wC,CAAA,gC,CAAA,mC,CAAA,kC,CAAA,kC,CAAA,6C,CAAA,uC,CAAA,iC,CAAA,mC,CAAA,kC,CAAA,oC,CAAA,0B,CAAA,oC,CAAA,kC,CAAA,iC,CAAA,4B,CAAA,yB,CAAA,4B,CAAA,8B,CAAA,4B,CAAA,gC,CAAA,kC,CAAA,4B,CAAA,0B,CAAA,0B,CAAA,yC,CAAA,yC,CAAA,gC,CAAA,6B,CAAA,8B,CAAA,iC,CAAA,2B,CAAA,yB,CAAA,yB,CAAA,4B,CAAA,6B,CAAA,4B,CAAA,4B,CAAA,gC,CAAA,2B,CAAA,2B,CAAA,kC,CAAA,8B,CAAA,6B,CAAA,6B,CAAA,sC,CAAA,yB,CAAA,kC,CAAA,6B,CAAA,0B,CAAA,2B,CAAA,8B,CAAA,4B,CAAA,kC,CAAA,8B,CAAA,+B,CAAA,2B,CAAA,8B,CAAA,6B,CAAA,4C,CAAA,qC,CAAA,qC,CAAA,6B,CAAA,oC,CAAA,0B,CAAA,wB,CAAA,gC,CAAA,uC,CAAA,+B,CAAA,+B,CAAA,gC,CAAA,sC,CAAA,sC,CAAA,+B,CAAA,6B,CAAA,6B,CAAA,6B,CAAA,6B,CAAA,0B,CAAA,+B,CAAA,0B,CAAA,0B,CAAA,iC,CAAA,kC,CAAA,+B,CAAA,8B,CAAA,4B,CAAA,0B,CAAA,gC,CAAA,+B,CAAA,iC,CAAA,2B,CAAA,0B,CAAA,4B,CAAA,0B,CAAA,6B,CAAA,oC,CAAA,4B,CAAA,kC,CAAA,oC,CAAA,6B,CAAA,4B,CAAA,0B,CAAA,iC,CAAA,wC,CAAA,gC,CAAA,gC,CAAA,iC,CAAA,uC,CAAA,uC,CAAA,gC,CAAA,0B,CAAA,iC,CAAA,wB,CAAA,6B,CAAA,8B,CAAA,sC,CAAA,gC,CAAA,6B,CAAA,wC,CAAA,+B,CAAA,+B,CAAA,8B,CAAA,mC,CAAA,qC,CAAA,uC,CAAA,+B,CAAA,iC,CAAA,gC,CAAA,4B,CAAA,8B,CAAA,+B,CAAA,+B,CAAA,sC,CAAA,gC,CAAA,8B,CAAA,iC,CAAA,8B,CAAA,6B,CAAA,gC,CAAA,kC,CAAA,uC,CAAA,6B,CAAA,qC,CAAA,gB,CAAgC,iB,CAChC,wB,CAAA,0B,CAAA,+B,CAAA,6B,CAAA,8B,CAAA,6B,CAAA,qC,CAAA,4B,CAAA,oC,CAAA,uC,CAAA,0B,CAAA,kC,CAAA,0B,CAAA,4B,CAAA,6B,CAAA,mC,CAAA,0B,CAAA,2B,CAAA,6B,CAAA,4B,CAAA,+B,CAAA,6B,CAAA,4B,CAAA,mC,CAAA,iC,CAAA,6B,CAAA,kC,CAAA,+B,CAAA,mC,CAAA,gC,CAAA,+B,CAAA,8B,CAAA,gC,CAAA,6C,CAAA,0B,CAAA,sC,CAAA,+B,CAAA,6B,CAAA,6B,CAAA,mC,CAAA,6B,CAAA,2B,CAAA,8B,CAAA,gC,CAAA,+B,CAAA,wC,CAAA,iC,CAAA,mC,CAAA,2B,CAAA,6B,CAAA,+B,CAAA,2B,CAAA,8B,CAAA,4B,CAAA,6B,CAAA,4B,CAAA,gC,CAAA,iC,CAAA,+B,CAAA,6B,CAAA,2B,CAAA,4B,CAAA,8B,CAAA,0B,CAAA,6B,CAAA,oC,CAAA,6B,CAAA,8B,CAAA,6B,CAAA,6B,CAAA,0B,CAAA,0B,CAAA,2B,CAAA,4B,CAAA,6B,CAAA,6B,CAAA,2B,CAAA,6B,CAAA,2B,CAAA,gC,CAAA,kC,CAAA,mC,CAAA,oC,CAAA,iC,CAAA,8C,CAAA,kC,CAAA,wC,CAAA,kC,CAAA,kC,CAAA,oC,CAAA,+B,CAAA,wC,CAAA,kC,CAAA,yC,CAAA,mC,CAAA,iC,CAAA,gC,CAAA,iC,CAAA,mC,CAAA,6B,CAAA,2B,CAAA,4B,CAAA,2B,CAAA,6B,CAAA,yB,CAAA,2B,CAAA,2B,CAAA,8B,CAAA,4B,CAAA,iC,CAAA,8B,CAAA,2B,CAAA,2B,CAAA,6B,CAAA,iC,CAAA,kC,CAAA,+C,CAAA,sC,CAAA,2C,CAAA,0C,CAAA,0C,CAAA,2C,CAAA,oC,CAAA,qC,CAAA,4C,CAAA,8C,CAAA,2C,CAAA,mD,CAAA,gC,CAAA,+B,CAAA,gC,CAAA,oC,CAAA,yC,CAAA,yC,CAAA,mC,CAAA,+B,CAAA,sC,CAAA,uC,CAAA,kC,CAAA,kC,CAAA,wC,CAAA,wC,CAAA,oC,CAAA,yC,CAAA,2C,CAAA,2C,CAAA,yC,CAAA,4C,CAAA,4C,CAAA,0C,CAAA,mC,CAAA,kC,CAAA,+B,CAAA,kC,CAAA,8B,CAAA,kC,CAAA,4B,CAAA,oC,CAAA,0C,CAAA,0B,CAAA,6B,CAAA,8B,CAAA,yC,CAAA,iC,CAAA,oC,CAAA,mC,CAAA,mC,CAAA,8C,CAAA,wC,CAAA,kC,CAAA,oC,CAAA,mC,CAAA,qC,CAAA,2B,CAAA,qC,CAAA,mC,CAAA,kC,CAAA,6B,CAAA,0B,CAAA,6B,CAAA,+B,CAAA,6B,CAAA,iC,CAAA,mC,CAAA,6B,CAAA,2B,CAAA,2B,CAAA,0C,CAAA,0C,CAAA,iC,CAAA,8B,CAAA,+B,CAAA,kC,CAAA,4B,CAAA,0B,CAAA,0B,CAAA,6B,CAAA,8B,CAAA,6B,CAAA,6B,CAAA,iC,CAAA,4B,CAAA,4B,CAAA,mC,CAAA,+B,CAAA,8B,CAAA,8B,CAAA,uC,CAAA,0B,CAAA,mC,CAAA,8B,CAAA,2B,CAAA,4B,CAAA,+B,CAAA,6B,CAAA,mC,CAAA,+B,CAAA,gC,CAAA,4B,CAAA,+B,CAAA,8B,CAAA,6C,CAAA,sC,CAAA,sC,CAAA,8B,CAAA,qC,CAAA,2B,CAAA,yB,CAAA,iC,CAAA,wC,CAAA,gC,CAAA,gC,CAAA,iC,CAAA,uC,CAAA,uC,CAAA,gC,CAAA,8B,CAAA,8B,CAAA,8B,CAAA,8B,CAAA,2B,CAAA,gC,CAAA,2B,CAAA,2B,CAAA,kC,CAAA,mC,CAAA,gC,CAAA,+B,CAAA,6B,CAAA,2B,CAAA,iC,CAAA,gC,CAAA,kC,CAAA,4B,CAAA,2B,CAAA,6B,CAAA,2B,CAAA,8B,CAAA,qC,CAAA,6B,CAAA,mC,CAAA,qC,CAAA,8B,CAAA,6B,CAAA,2B,CAAA,kC,CAAA,yC,CAAA,iC,CAAA,iC,CAAA,kC,CAAA,wC,CAAA,wC,CAAA,iC,CAAA,2B,CAAA,kC,CAAA,yB,CAAA,8B,CAAA,+B,CAAA,uC,CAAA,iC,CAAA,8B,CAAA,yC,CAAA,gC,CAAA,gC,CAAA,+B,CAAA,oC,CAAA,sC,CAAA,wC,CAAA,gC,CAAA,kC,CAAA,iC,CAAA,6B,CAAA,+B,CAAA,gC,CAAA,gC,CAAA,uC,CAAA,iC,CAAA,+B,CAAA,kC,CAAA,+B,CAAA,8B,CAAA,iC,CAAA,mC,CAAA,wC,CAAA,8B,CAAA,sC,CAAA,iB,CAAiC,gB,CAKnC,U,CAAa,U,CAGX,a,CAAA,oB,CAAA,sB,CAAA,2B,CAAA,yB,CAAA,0B,CAAA,yB,CAAA,iC,CAAA,wB,CAAA,gC,CAAA,mC,CAAA,sB,CAAA,8B,CAAA,sB,CAAA,wB,CAAA,yB,CAAA,+B,CAAA,sB,CAAA,uB,CAAA,yB,CAAA,wB,CAAA,2B,CAAA,yB,CAAA,wB,CAAA,+B,CAAA,6B,CAAA,yB,CAAA,8B,CAAA,2B,CAAA,+B,CAAA,4B,CAAA,2B,CAAA,0B,CAAA,4B,CAAA,yC,CAAA,sB,CAAA,kC,CAAA,2B,CAAA,yB,CAAA,yB,CAAA,+B,CAAA,yB,CAAA,uB,CAAA,0B,CAAA,4B,CAAA,2B,CAAA,oC,CAAA,6B,CAAA,+B,CAAA,uB,CAAA,yB,CAAA,2B,CAAA,uB,CAAA,0B,CAAA,wB,CAAA,yB,CAAA,wB,CAAA,4B,CAAA,6B,CAAA,2B,CAAA,yB,CAAA,uB,CAAA,wB,CAAA,0B,CAAA,sB,CAAA,yB,CAAA,gC,CAAA,yB,CAAA,0B,CAAA,yB,CAAA,yB,CAAA,sB,CAAA,sB,CAAA,uB,CAAA,wB,CAAA,yB,CAAA,yB,CAAA,uB,CAAA,yB,CAAA,uB,CAAA,4B,CAAA,8B,CAAA,+B,CAAA,gC,CAAA,6B,CAAA,0C,CAAA,8B,CAAA,oC,CAAA,8B,CAAA,8B,CAAA,gC,CAAA,2B,CAAA,oC,CAAA,8B,CAAA,qC,CAAA,+B,CAAA,6B,CAAA,4B,CAAA,6B,CAAA,+B,CAAA,yB,CAAA,uB,CAAA,wB,CAAA,uB,CAAA,yB,CAAA,qB,CAAA,uB,CAAA,uB,CAAA,0B,CAAA,wB,CAAA,6B,CAAA,0B,CAAA,uB,CAAA,uB,CAAA,yB,CAAA,6B,CAAA,8B,CAAA,2C,CAAA,kC,CAAA,uC,CAAA,sC,CAAA,sC,CAAA,uC,CAAA,gC,CAAA,iC,CAAA,wC,CAAA,0C,CAAA,uC,CAAA,+C,CAAA,4B,CAAA,2B,CAAA,4B,CAAA,gC,CAAA,qC,CAAA,qC,CAAA,+B,CAAA,2B,CAAA,kC,CAAA,mC,CAAA,8B,CAAA,8B,CAAA,oC,CAAA,oC,CAAA,gC,CAAA,qC,CAAA,uC,CAAA,uC,CAAA,qC,CAAA,wC,CAAA,wC,CAAA,sC,CAAA,+B,CAAA,8B,CAAA,2B,CAAA,8B,CAAA,0B,CAAA,8B,CAAA,wB,CAAA,gC,CAAA,sC,CAAA,sB,CAAA,yB,CAAA,0B,CAAA,qC,CAAA,6B,CAAA,gC,CAAA,+B,CAAA,+B,CAAA,0C,CAAA,oC,CAAA,8B,CAAA,gC,CAAA,+B,CAAA,iC,CAAA,uB,CAAA,iC,CAAA,+B,CAAA,8B,CAAA,yB,CAAA,sB,CAAA,yB,CAAA,2B,CAAA,yB,CAAA,6B,CAAA,+B,CAAA,yB,CAAA,uB,CAAA,uB,CAAA,sC,CAAA,sC,CAAA,6B,CAAA,0B,CAAA,2B,CAAA,8B,CAAA,wB,CAAA,sB,CAAA,sB,CAAA,yB,CAAA,0B,CAAA,yB,CAAA,yB,CAAA,6B,CAAA,wB,CAAA,wB,CAAA,+B,CAAA,2B,CAAA,0B,CAAA,0B,CAAA,mC,CAAA,sB,CAAA,+B,CAAA,0B,CAAA,uB,CAAA,wB,CAAA,2B,CAAA,yB,CAAA,+B,CAAA,2B,CAAA,4B,CAAA,wB,CAAA,2B,CAAA,0B,CAAA,yC,CAAA,kC,CAAA,kC,CAAA,0B,CAAA,iC,CAAA,uB,CAAA,qB,CAAA,6B,CAAA,oC,CAAA,4B,CAAA,4B,CAAA,6B,CAAA,mC,CAAA,mC,CAAA,4B,CAAA,0B,CAAA,0B,CAAA,0B,CAAA,0B,CAAA,uB,CAAA,4B,CAAA,uB,CAAA,uB,CAAA,8B,CAAA,+B,CAAA,4B,CAAA,2B,CAAA,yB,CAAA,uB,CAAA,6B,CAAA,4B,CAAA,8B,CAAA,wB,CAAA,uB,CAAA,yB,CAAA,uB,CAAA,0B,CAAA,iC,CAAA,yB,CAAA,+B,CAAA,iC,CAAA,0B,CAAA,yB,CAAA,uB,CAAA,8B,CAAA,qC,CAAA,6B,CAAA,6B,CAAA,8B,CAAA,oC,CAAA,oC,CAAA,6B,CAAA,uB,CAAA,8B,CAAA,qB,CAAA,0B,CAAA,2B,CAAA,mC,CAAA,6B,CAAA,0B,CAAA,qC,CAAA,4B,CAAA,4B,CAAA,2B,CAAA,gC,CAAA,kC,CAAA,oC,CAAA,4B,CAAA,8B,CAAA,6B,CAAA,yB,CAAA,2B,CAAA,4B,CAAA,4B,CAAA,mC,CAAA,6B,CAAA,2B,CAAA,8B,CAAA,2B,CAAA,0B,CAAA,6B,CAAA,+B,CAAA,oC,CAAA,0B,CAAA,kC,CAAc,iB,CACd,c,CAAA,qB,CAAA,uB,CAAA,4B,CAAA,0B,CAAA,2B,CAAA,0B,CAAA,kC,CAAA,yB,CAAA,iC,CAAA,oC,CAAA,uB,CAAA,+B,CAAA,uB,CAAA,yB,CAAA,0B,CAAA,gC,CAAA,uB,CAAA,wB,CAAA,0B,CAAA,yB,CAAA,4B,CAAA,0B,CAAA,yB,CAAA,gC,CAAA,8B,CAAA,0B,CAAA,+B,CAAA,4B,CAAA,gC,CAAA,6B,CAAA,4B,CAAA,2B,CAAA,6B,CAAA,0C,CAAA,uB,CAAA,mC,CAAA,4B,CAAA,0B,CAAA,0B,CAAA,gC,CAAA,0B,CAAA,wB,CAAA,2B,CAAA,6B,CAAA,4B,CAAA,qC,CAAA,8B,CAAA,gC,CAAA,wB,CAAA,0B,CAAA,4B,CAAA,wB,CAAA,2B,CAAA,yB,CAAA,0B,CAAA,yB,CAAA,6B,CAAA,8B,CAAA,4B,CAAA,0B,CAAA,wB,CAAA,yB,CAAA,2B,CAAA,uB,CAAA,0B,CAAA,iC,CAAA,0B,CAAA,2B,CAAA,0B,CAAA,0B,CAAA,uB,CAAA,uB,CAAA,wB,CAAA,yB,CAAA,0B,CAAA,0B,CAAA,wB,CAAA,0B,CAAA,wB,CAAA,6B,CAAA,+B,CAAA,gC,CAAA,iC,CAAA,8B,CAAA,2C,CAAA,+B,CAAA,qC,CAAA,+B,CAAA,+B,CAAA,iC,CAAA,4B,CAAA,qC,CAAA,+B,CAAA,sC,CAAA,gC,CAAA,8B,CAAA,6B,CAAA,8B,CAAA,gC,CAAA,0B,CAAA,wB,CAAA,yB,CAAA,wB,CAAA,0B,CAAA,sB,CAAA,wB,CAAA,wB,CAAA,2B,CAAA,yB,CAAA,8B,CAAA,2B,CAAA,wB,CAAA,wB,CAAA,0B,CAAA,8B,CAAA,+B,CAAA,4C,CAAA,mC,CAAA,wC,CAAA,uC,CAAA,uC,CAAA,wC,CAAA,iC,CAAA,kC,CAAA,yC,CAAA,2C,CAAA,wC,CAAA,gD,CAAA,6B,CAAA,4B,CAAA,6B,CAAA,iC,CAAA,sC,CAAA,sC,CAAA,gC,CAAA,4B,CAAA,mC,CAAA,oC,CAAA,+B,CAAA,+B,CAAA,qC,CAAA,qC,CAAA,iC,CAAA,sC,CAAA,wC,CAAA,wC,CAAA,sC,CAAA,yC,CAAA,yC,CAAA,uC,CAAA,gC,CAAA,+B,CAAA,4B,CAAA,+B,CAAA,2B,CAAA,+B,CAAA,yB,CAAA,iC,CAAA,uC,CAAA,uB,CAAA,0B,CAAA,2B,CAAA,sC,CAAA,8B,CAAA,iC,CAAA,gC,CAAA,gC,CAAA,2C,CAAA,qC,CAAA,+B,CAAA,iC,CAAA,gC,CAAA,kC,CAAA,wB,CAAA,kC,CAAA,gC,CAAA,+B,CAAA,0B,CAAA,uB,CAAA,0B,CAAA,4B,CAAA,0B,CAAA,8B,CAAA,gC,CAAA,0B,CAAA,wB,CAAA,wB,CAAA,uC,CAAA,uC,CAAA,8B,CAAA,2B,CAAA,4B,CAAA,+B,CAAA,yB,CAAA,uB,CAAA,uB,CAAA,0B,CAAA,2B,CAAA,0B,CAAA,0B,CAAA,8B,CAAA,yB,CAAA,yB,CAAA,gC,CAAA,4B,CAAA,2B,CAAA,2B,CAAA,oC,CAAA,uB,CAAA,gC,CAAA,2B,CAAA,wB,CAAA,yB,CAAA,4B,CAAA,0B,CAAA,gC,CAAA,4B,CAAA,6B,CAAA,yB,CAAA,4B,CAAA,2B,CAAA,0C,CAAA,mC,CAAA,mC,CAAA,2B,CAAA,kC,CAAA,wB,CAAA,sB,CAAA,8B,CAAA,qC,CAAA,6B,CAAA,6B,CAAA,8B,CAAA,oC,CAAA,oC,CAAA,6B,CAAA,2B,CAAA,2B,CAAA,2B,CAAA,2B,CAAA,wB,CAAA,6B,CAAA,wB,CAAA,wB,CAAA,+B,CAAA,gC,CAAA,6B,CAAA,4B,CAAA,0B,CAAA,wB,CAAA,8B,CAAA,6B,CAAA,+B,CAAA,yB,CAAA,wB,CAAA,0B,CAAA,wB,CAAA,2B,CAAA,kC,CAAA,0B,CAAA,gC,CAAA,kC,CAAA,2B,CAAA,0B,CAAA,wB,CAAA,+B,CAAA,sC,CAAA,8B,CAAA,8B,CAAA,+B,CAAA,qC,CAAA,qC,CAAA,8B,CAAA,wB,CAAA,+B,CAAA,sB,CAAA,2B,CAAA,4B,CAAA,oC,CAAA,8B,CAAA,2B,CAAA,sC,CAAA,6B,CAAA,6B,CAAA,4B,CAAA,iC,CAAA,mC,CAAA,qC,CAAA,6B,CAAA,+B,CAAA,8B,CAAA,0B,CAAA,4B,CAAA,6B,CAAA,6B,CAAA,oC,CAAA,8B,CAAA,4B,CAAA,+B,CAAA,4B,CAAA,2B,CAAA,8B,CAAA,gC,CAAA,qC,CAAA,2B,CAAA,mC,CAAe,gB,CNpBjB,Q,CACE,4C,CACQ,oC,CAGV,S,CAAA,gB,CACE,8C,CACQ,sC,COPV,a,CCWE,qE,CACA,+B,CAEQ,uB,CDbV,c,CCUE,qE,CACA,gC,CAEQ,wB,CDZV,c,CCSE,qE,CACA,gC,CAEQ,wB,CDVV,mB,CCcE,+E,CACA,6B,CAEQ,qB,CDhBV,iB,CCaE,+E,CACA,6B,CAEQ,qB,C/EsqMV,yB,CACA,uB,CAHA,oB,CACA,oB,C8EhrMA,mB,CAKE,mB,CAAA,W,CEfF,S,CACE,iB,CACA,oB,CACA,S,CACA,U,CACA,e,CACA,qB,CAEF,Y,CAAA,Y,CACE,iB,CACA,M,CACA,U,CACA,iB,CAEF,Y,CAA8B,mB,CAC9B,Y,CAA8B,a,CAC9B,W,CAA6B,U,CChB7B,gB,CAAkC,e,CAClC,gB,CAAkC,e,CAClC,iB,CAAA,sB,CAAmC,e,CACnC,qB,CAAA,uB,CAAuC,e,CACvC,gB,CAAkC,e,CAClC,e,CAAA,wB,CAAA,0B,CAAiC,e,CACjC,iB,CAAmC,e,CACnC,e,CAAA,mC,CAAA,oB,CAAiC,e,CACjC,e,CAAiC,e,CACjC,mB,CAAqC,e,CACrC,a,CAA+B,e,CAC/B,kB,CAAoC,e,CACpC,gB,CAAA,qB,CAAA,sC,CAAA,uB,CAAA,oB,CAAkC,e,CjFwwMlC,gB,CiFvwMA,iB,CjFwwMA,gB,CAKA,qB,CAJA,6B,CAEA,0B,CADA,sB,CAEA,2B,CiF1wMkC,e,CAClC,sB,CAAwC,e,CACxC,uB,CAAyC,e,CACzC,oB,CAAA,0B,CAAA,iC,CAAA,kC,CAAA,0B,CAAsC,e,CACtC,iB,CAAmC,e,CjF4xMnC,c,CiF3xMA,e,CjF+xMA,wB,CAFA,6B,CACA,wB,CAFA,uB,CiF3xMgC,e,CAChC,kB,CAAoC,e,CACpC,e,CAAA,yB,CAAiC,e,CACjC,iB,CAAA,oB,CAAA,wC,CAAA,oC,CAAmC,e,CACnC,kB,CAAA,uB,CAAA,kC,CAAA,wB,CAAA,oB,CAAoC,e,CACpC,e,CAAiC,e,CACjC,mB,CAAA,wB,CAAA,sB,CAAA,iC,CAAA,uC,CAAqC,e,CACrC,8B,CAAgD,e,CAChD,4B,CAA8C,e,CAC9C,gB,CAAkC,e,CAClC,wB,CAA0C,e,CjFi0M1C,iB,CiFh0MA,uB,CACmC,e,CACnC,kB,CAAA,2B,CAAA,2B,CAAA,uB,CAAA,uB,CAAA,+B,CAAA,yB,CAAoC,e,CACpC,mB,CAAA,qB,CAAA,4B,CAAA,wB,CAAqC,e,CACrC,e,CAAA,oB,CAAiC,e,CACjC,e,CAAiC,e,CACjC,qB,CAAuC,e,CACvC,qB,CAAuC,e,CACvC,sB,CAAwC,e,CACxC,oB,CAAsC,e,CACtC,iB,CAAmC,e,CACnC,kB,CAAoC,e,CACpC,c,CAAgC,e,CAChC,e,CAAA,oB,CAAiC,e,CACjC,e,CAAiC,e,CACjC,mB,CAAqC,e,CACrC,gB,CAAkC,e,CAClC,iB,CAAA,gC,CAAA,2B,CAAmC,e,CACnC,e,CAAiC,e,CACjC,e,CAAiC,e,CACjC,iB,CAAmC,e,CACnC,sB,CAAwC,e,CACxC,qB,CAAuC,e,CACvC,qB,CAAuC,e,CACvC,uB,CAAyC,e,CACzC,sB,CAAwC,e,CACxC,wB,CAA0C,e,CAC1C,e,CAAA,oB,CAAA,kC,CAAiC,e,CACjC,iB,CjFi5MA,kB,CiFh5MoC,e,CACpC,iB,CAAmC,e,CACnC,uB,CAAyC,e,CjF25MzC,gB,CiF15MA,gB,CjF25MA,oB,CiFz5MsC,e,CACtC,iB,CAAA,oB,CAAmC,e,CACnC,qB,CAAA,kB,CAAuC,e,CACvC,iB,CAAmC,e,CACnC,e,CAAiC,e,CACjC,e,CjFy6MA,0B,CACA,uB,CiFz6M4C,e,CAC5C,yB,CAA2C,e,CAC3C,yB,CAA2C,e,CAC3C,iB,CAAmC,e,CACnC,wB,CAA0C,e,CAC1C,wB,CAA0C,e,CAC1C,mB,CAAqC,e,CACrC,e,CAAA,0B,CAAA,kC,CAAA,6B,CAAA,4B,CAAA,mB,CAAA,wB,CAAiC,e,CACjC,gB,CAAA,sB,CAAA,wB,CAAkC,e,CAClC,e,CAAA,yB,CAAA,uB,CAAiC,e,CACjC,kB,CAAA,6B,CAAA,gC,CAAoC,e,CACpC,uB,CAAyC,e,CACzC,uB,CAAyC,e,CACzC,gB,CAAA,0B,CAAA,wB,CAAkC,e,CAClC,uB,CAAA,wB,CAAyC,e,CACzC,wB,CAAA,oB,CAA0C,e,CAC1C,sB,CAAwC,e,CACxC,uB,CAAyC,e,CACzC,uB,CAAA,4B,CAAA,4B,CAAA,0B,CAAA,2B,CAAyC,e,CACzC,uB,CAAA,2B,CAAyC,e,CACzC,0B,CAAA,8B,CAAA,8B,CAA4C,e,CAC5C,sB,CAAA,oB,CAAA,4B,CAAwC,e,CACxC,qB,CAAuC,e,CACvC,yB,CAA2C,e,CAC3C,yB,CAA2C,e,CAC3C,c,CAAA,sB,CAAA,sB,CAAA,2B,CAAA,yB,CAAA,2B,CAAA,0B,CAAgC,e,CAChC,qB,CAAuC,e,CACvC,sB,CAAA,2B,CAAwC,e,CACxC,mB,CAAA,oB,CAAqC,e,CACrC,qB,CAAA,mB,CAAuC,e,CACvC,uB,CjFogNA,gB,CAKA,2B,CAJA,qB,CACA,0B,CACA,2B,CACA,0B,CiFvgNkC,e,CAClC,iB,CAAmC,e,CACnC,mB,CAAA,gC,CAAqC,e,CACrC,e,CAAA,uB,CAAA,mB,CAAA,wB,CAAA,+B,CAAA,6B,CAAA,wB,CAAA,0B,CAAA,oB,CAAA,sB,CAAiC,e,CACjC,gB,CAAA,qB,CAAkC,e,CAClC,mB,CAAqC,e,CACrC,6B,CAA+C,e,CAC/C,e,CAAiC,e,CACjC,e,CAAiC,e,CACjC,e,CAAA,iC,CAAiC,e,CACjC,c,CAAA,oC,CAAA,uC,CAAA,kC,CAAA,uB,CAAA,qB,CAAgC,e,CAChC,oB,CAAA,sB,CAAsC,e,CjF8iNtC,+B,CiF7iNA,kB,CjFgjNA,qB,CADA,qB,CADA,uC,CiF7iNiD,e,CACjD,gB,CAAkC,e,CAClC,mB,CAAqC,e,CACrC,iB,CAAmC,e,CACnC,kB,CAAoC,e,CACpC,iB,CAAmC,e,CACnC,qB,CAAA,0B,CAAuC,e,CACvC,uB,CAAA,4B,CAAyC,e,CACzC,kB,CAAA,kC,CAAA,gC,CAAA,iC,CAAoC,e,CACpC,wB,CAA0C,e,CAC1C,iB,CAAA,sB,CAAmC,e,CACnC,sB,CAAwC,e,CACxC,mB,CAAqC,e,CACrC,mB,CAAA,2B,CAAqC,e,CACrC,sB,CjF0lNA,oB,CACA,oC,CiF1lNsC,e,CACtC,yB,CAA2C,e,CAC3C,0B,CAA4C,e,CAC5C,uB,CAAyC,e,CACzC,c,CAAA,kC,CAAA,wB,CAAA,uB,CAAgC,e,CjF2mNhC,e,CiF1mNA,gB,CjF6mNA,oB,CADA,oB,CADA,yB,CiF1mNiC,e,CACjC,mB,CAAqC,e,CACrC,sB,CAAwC,e,CACxC,wB,CAA0C,e,CAC1C,oB,CAAsC,e,CACtC,kB,CAAoC,e,CACpC,mB,CAAA,sB,CAAA,wB,CAAqC,e,CACrC,0B,CAA4C,e,CAC5C,qB,CAAA,wB,CAAA,kC,CAAuC,e,CACvC,wB,CAA0C,e,CAC1C,kB,CAAA,qB,CAAoC,e,CACpC,iB,CAAmC,e,CACnC,wB,CAA0C,e,CAC1C,iB,CAAA,mC,CAAA,uB,CAAA,sB,CAAmC,e,CACnC,kB,CAAoC,e,CACpC,gB,CAAkC,e,CAClC,mB,CAAqC,e,CACrC,qB,CAAuC,e,CACvC,uB,CAAyC,e,CACzC,kB,CAAoC,e,CACpC,qB,CjFyqNA,mB,CiFxqNqC,e,CACrC,iB,CAAmC,e,CACnC,iB,CAAA,sB,CAAmC,e,CACnC,sB,CAAwC,e,CACxC,e,CjFqrNA,c,CiFprNgC,e,CAChC,gB,CAAA,oB,CAAA,4B,CAAkC,e,CAClC,mB,CAAqC,e,CACrC,e,CAAA,iC,CAAA,4B,CAAA,4B,CAAiC,e,CACjC,sB,CAAwC,e,CACxC,uB,CAAyC,e,CACzC,sB,CAAwC,e,CACxC,oB,CAAsC,e,CACtC,sB,CAAwC,e,CACxC,4B,CAA8C,e,CAC9C,6B,CAA+C,e,CAC/C,0B,CAA4C,e,CAC5C,4B,CAA8C,e,CAC9C,gB,CAAA,qB,CAAkC,e,CAClC,iB,CAAA,8B,CAAA,mB,CAAA,oB,CAAA,yB,CAAA,0B,CAAmC,e,CACnC,gB,CAAA,oB,CAAkC,e,CAClC,iB,CAAA,uB,CAAmC,e,CACnC,oB,CAAsC,e,CACtC,qB,CAAuC,e,CACvC,gB,CjF8uNA,gB,CAEA,qB,CADA,oC,CiF9uNkC,e,CAClC,gB,CjFmvNA,e,CAEA,uB,CADA,yB,CiFnvNiC,e,CACjC,gB,CAAA,iC,CAAA,qC,CAAA,oB,CAAA,4B,CAAkC,e,CAClC,gB,CAAkC,e,CAClC,c,CjF8vNA,mB,CiF7vNqC,e,CACrC,e,CjFiwNA,kB,CACA,6B,CiFlwNA,wB,CACoC,e,CACpC,oB,CAAsC,e,CjFywNtC,mB,CiFxwNA,e,CjFywNA,oB,CiFxwNqC,e,CACrC,iB,CAAmC,e,CjFixNnC,e,CiFhxNA,kB,CjF+wNA,kB,CAGA,6B,CADA,mB,CiF/wNiC,e,CACjC,kB,CAAoC,e,CACpC,kB,CAAA,oC,CAAoC,e,CACpC,wB,CAA0C,e,CAC1C,oB,CAAsC,e,CACtC,gB,CAAkC,e,CAClC,gB,CAAkC,e,CAClC,gB,CAAkC,e,CAClC,oB,CAAsC,e,CACtC,2B,CAA6C,e,CAC7C,6B,CAA+C,e,CAC/C,sB,CAAwC,e,CACxC,gB,CAAkC,e,CAClC,qB,CAAA,qB,CAAuC,e,CACvC,mB,CAAA,wB,CAAqC,e,CACrC,qB,CAAuC,e,CACvC,sB,CAAwC,e,CACxC,kB,CAAoC,e,CjFw0NpC,e,CiFv0NA,mB,CjFw0NA,oB,CiFv0NiC,e,CjF40NjC,oB,CiF30NA,oB,CACsC,e,CjF+0NtC,mB,CiF90NA,kB,CACqC,e,CACrC,mB,CAAqC,e,CACrC,mB,CAAqC,e,CACrC,sB,CjFu1NA,e,CACA,4B,CACA,qB,CACA,oB,CiFz1NiC,e,CjF81NjC,gB,CiF71NA,gB,CjF81NA,gC,CACA,iC,CiF91NkC,e,CAClC,oB,CjFk2NA,qB,CiFl2NA,8B,CAAA,2B,CjFm2NA,2B,CiFl2NuC,e,CACvC,oB,CAAsC,e,CACtC,qB,CAAuC,e,CjF62NvC,e,CiF52NA,gB,CjF62NA,iC,CACA,+B,CiF72NiC,e,CACjC,kB,CAAA,gC,CAAA,uB,CAAA,iC,CAAoC,e,CACpC,mB,CAAqC,e,CjFw3NrC,oB,CiFv3NA,gB,CjFw3NA,yB,CiFv3NsC,e,CACtC,sB,CAAwC,e,CACxC,mB,CAAA,mB,CAAqC,e,CACrC,yB,CAA2C,e,CAC3C,uB,CAAA,4B,CAAA,+B,CAAyC,e,CACzC,kB,CAAoC,e,CACpC,sB,CAAwC,e,CACxC,mB,CAAqC,e,CACrC,iB,CAAmC,e,CACnC,iB,CAAmC,e,CACnC,kB,CAAoC,e,CACpC,sB,CAAA,4B,CAAA,mC,CAAwC,e,CACxC,qB,CAAuC,e,CACvC,qB,CAAuC,e,CACvC,oB,CAAsC,e,CACtC,iB,CAAA,yB,CAAA,iC,CAAA,0B,CAAmC,e,CACnC,sB,CAAwC,e,CACxC,e,CAAiC,e,CACjC,mB,CAAqC,e,CACrC,sB,CAAwC,e,CACxC,4B,CAA8C,e,CAC9C,6B,CAA+C,e,CAC/C,0B,CAA4C,e,CAC5C,4B,CAAA,mC,CAA8C,e,CAC9C,qB,CAAuC,e,CACvC,sB,CAAwC,e,CACxC,mB,CAAqC,e,CACrC,qB,CAAuC,e,CACvC,kB,CAAA,sB,CAAA,2B,CAAA,uB,CAAA,yB,CAAA,yB,CAAA,0B,CAAA,4B,CAAA,kB,CAAoC,e,CACpC,iB,CAAmC,e,CACnC,iB,CAAmC,e,CACnC,uB,CjFq9NA,iB,CiFp9NmC,e,CACnC,mB,CAAqC,e,CACrC,qB,CAAuC,e,CACvC,sB,CAAwC,e,CACxC,kB,CAAA,uB,CAAoC,e,CACpC,iB,CAAA,6B,CAAA,gC,CAAA,oB,CAAA,sB,CAAA,wB,CAAA,sB,CAAA,sB,CAAA,uB,CAAA,uB,CAAA,8B,CAAA,yB,CAAA,uB,CAAmC,e,CACnC,qB,CjFu+NA,gB,CiFt+NkC,e,CAClC,qB,CAAuC,e,CACvC,mB,CAAqC,e,CACrC,wB,CAA0C,e,CAC1C,kB,CAAoC,e,CACpC,kB,CAAoC,e,CACpC,gB,CAAkC,e,CAClC,kB,CAAoC,e,CACpC,qB,CAAA,6B,CAAA,yB,CAAA,2B,CAAuC,e,CACvC,iB,CAAmC,e,CACnC,yB,CAAA,8B,CAAA,uB,CAA2C,e,CAC3C,mB,CAAA,0B,CAAqC,e,CACrC,e,CAAA,mB,CAAA,wB,CAAiC,e,CACjC,yB,CjF8gOA,oB,CiF7gOsC,e,CACtC,0B,CjFihOA,yB,CACA,sB,CiFhhOwC,e,CACxC,yB,CAA2C,e,CAC3C,e,CAAiC,e,CACjC,oB,CAAA,4B,CAAA,6B,CAAsC,e,CjF8hOtC,uB,CiF7hOA,iB,CAAA,0B,CAAA,4B,CACyC,e,CACzC,mB,CAAqC,e,CACrC,e,CAAA,0B,CAAiC,e,CACjC,sB,CAAwC,e,CACxC,sB,CAAwC,e,CACxC,oB,CAAsC,e,CACtC,iB,CAAmC,e,CACnC,uB,CAAA,qC,CAAA,sB,CAAyC,e,CACzC,qB,CAAuC,e,CACvC,2B,CAA6C,e,CAC7C,iB,CAAmC,e,CACnC,qB,CAAuC,e,CACvC,4B,CAA8C,e,CAC9C,iB,CAAA,sB,CAAmC,e,CACnC,iB,CAAmC,e,CACnC,8B,CAAgD,e,CAChD,+B,CAAiD,e,CACjD,4B,CAA8C,e,CAC9C,8B,CAAgD,e,CAChD,gB,CAAkC,e,CAClC,e,CAAiC,e,CACjC,iB,CAAmC,e,CACnC,qB,CAAuC,e,CACvC,mB,CAAqC,e,CACrC,qB,CAAuC,e,CACvC,qB,CAAA,oB,CAAuC,e,CACvC,qB,CAAuC,e,CACvC,sB,CAAwC,e,CACxC,iB,CAAA,sB,CAAmC,e,CACnC,uB,CAAyC,e,CACzC,yB,CAA2C,e,CAC3C,mB,CAAqC,e,CACrC,qB,CAAuC,e,CACvC,uB,CAAyC,e,CACzC,wB,CAA0C,e,CAC1C,+B,CAAiD,e,CACjD,uB,CAAyC,e,CACzC,kB,CAAoC,e,CjFgpOpC,8B,CiF/oOA,sB,CACgD,e,CjFmpOhD,4B,CiFlpOA,oB,CAC8C,e,CjFspO9C,+B,CiFrpOA,uB,CACiD,e,CjFypOjD,c,CiFxpOA,e,CACgC,e,CAChC,c,CAAgC,e,CAChC,iB,CjF8pOA,c,CiF7pOgC,e,CjFkqOhC,c,CiFjqOA,gB,CACgC,e,CAChC,c,CjFsqOA,c,CAFA,c,CACA,c,CiFlqOgC,e,CjFwqOhC,iB,CACA,c,CiFxqOA,gB,CAEgC,e,CjF2qOhC,c,CiF1qOA,c,CACgC,e,CAChC,kB,CjF6qOA,c,CiF5qOgC,e,CAChC,e,CAAiC,e,CACjC,oB,CAAA,2B,CAAsC,e,CACtC,yB,CAA2C,e,CAC3C,0B,CAA4C,e,CAC5C,0B,CAA4C,e,CAC5C,2B,CAA6C,e,CAC7C,2B,CAA6C,e,CAC7C,4B,CAA8C,e,CAC9C,oB,CAAA,qB,CAAsC,e,CACtC,sB,CAAwC,e,CACxC,yB,CAA2C,e,CAC3C,kB,CAAoC,e,CACpC,e,CAAiC,e,CACjC,sB,CAAwC,e,CACxC,uB,CAAyC,e,CACzC,kB,CAAoC,e,CACpC,yB,CAA2C,e,CAC3C,oB,CAAsC,e,CACtC,iB,CAAmC,e,CACnC,c,CAAgC,e,CAChC,oB,CAAsC,e,CACtC,2B,CAA6C,e,CAC7C,iB,CAAmC,e,CACnC,wB,CAA0C,e,CAC1C,0B,CAA4C,e,CAC5C,wB,CAA0C,e,CAC1C,0B,CAA4C,e,CAC5C,2B,CAA6C,e,CAC7C,gB,CAAkC,e,CAClC,kB,CAAA,uB,CAAoC,e,CACpC,kB,CAAoC,e,CACpC,gB,CAAA,qB,CAAkC,e,CAClC,mB,CAAqC,e,CACrC,gB,CAAkC,e,CAClC,qB,CAAuC,e,CACvC,iB,CAAmC,e,CACnC,iB,CAAmC,e,CACnC,e,CAAiC,e,CACjC,iB,CjFkyOA,mB,CiFjyOqC,e,CACrC,gB,CAAkC,e,CAClC,iB,CAAmC,e,CACnC,kB,CAAA,sB,CAAA,2B,CAAoC,e,CACpC,c,CAAA,mB,CAAgC,e,CAChC,a,CAA+B,e,CAC/B,gB,CAAkC,e,CAClC,iB,CAAmC,e,CACnC,oB,CAAsC,e,CACtC,yB,CAA2C,e,CAC3C,+B,CAAiD,e,CACjD,8B,CAAgD,e,CjFu0OhD,8B,CiFt0OA,sB,CACgD,e,CAChD,uB,CAAyC,e,CACzC,qB,CAAuC,e,CACvC,uB,CAAyC,e,CjFm1OzC,c,CiFl1OA,uB,CACgC,e,CAChC,wB,CAA0C,e,CAC1C,wB,CAA0C,e,CAC1C,gB,CAAkC,e,CAClC,0B,CAA4C,e,CAC5C,oB,CAAsC,e,CACtC,iB,CAAmC,e,CjFw2OnC,e,CiFv2OA,sB,CjFw2OA,qB,CiFt2OuC,e,CjF22OvC,yB,CiF12OA,uB,CAC2C,e,CAC3C,gB,CAAkC,e,CAClC,iB,CAAmC,e,CACnC,iB,CAAmC,e,CACnC,wB,CAA0C,e,CAC1C,6B,CAA+C,e,CAC/C,sB,CAAwC,e,CACxC,oB,CAAsC,e,CACtC,e,CAAiC,e,CACjC,wB,CAA0C,e,CAC1C,yB,CAA2C,e,CAC3C,iB,CAAmC,e,CACnC,iB,CAAmC,e,CACnC,mB,CAAqC,e,CACrC,c,CAAgC,e,CAChC,mB,CAAqC,e,CACrC,gB,CAAkC,e,CAClC,c,CAAgC,e,CAChC,gB,CAAkC,e,CAClC,e,CAAA,4B,CAAA,wB,CAAiC,e,CACjC,gB,CAAA,wB,CAAkC,e,CAClC,kB,CAAoC,e,CACpC,yB,CAA2C,e,CAC3C,gB,CAAkC,e,CAClC,uB,CAAyC,e,CACzC,kB,CAAA,wB,CAAoC,e,CACpC,qB,CjFw7OA,c,CiFv7OgC,e,CAChC,c,CjF27OA,e,CiF17OiC,e,CACjC,e,CAAiC,e,CACjC,kB,CAAoC,e,CACpC,qB,CAAuC,e,CACvC,qB,CAAuC,e,CACvC,mB,CAAA,sB,CAAA,wB,CAAA,2B,CAAA,2B,CAAA,kB,CAAqC,e,CACrC,qB,CAAuC,e,CACvC,sB,CAAwC,e,CACxC,uB,CAAyC,e,CACzC,4B,CAA8C,e,CjF29O9C,uB,CiF19OA,uB,CjFy9OA,yB,CiFv9OyC,e,CjF69OzC,yB,CiF59OA,qB,CjF89OA,sB,CADA,+B,CiF59O2C,e,CjFk+O3C,uB,CiFj+OA,uB,CACyC,e,CACzC,uB,CjFo+OA,uB,CiFn+OyC,e,CACzC,sB,CAAwC,e,CACxC,e,CAAiC,e,CACjC,kB,CAAoC,e,CACpC,mB,CAAqC,e,CACrC,oB,CjFm/OA,oB,CAKA,oB,CAJA,qB,CACA,kB,CAIA,oB,CAFA,4B,CADA,uB,CiFl/OsC,e,CACtC,yB,CAAA,yB,CAAA,mC,CAA2C,e,CAC3C,a,CjF6/OA,gB,CADA,qB,CiF1/OkC,e,CjFggPlC,iB,CiF//OA,a,CACmC,e,CACnC,qB,CAAA,mB,CAAuC,e,CACvC,c,CAAgC,e,CjF0gPhC,sB,CiFzgPA,8B,CjFwgPA,oB,CiFtgPwC,e,CACxC,wB,CAA0C,e,CAC1C,a,CAA+B,e,CAC/B,iB,CjFihPA,iB,CiFhhPmC,e,CjFqhPnC,sB,CiFphPA,e,CACwC,e,CjFwhPxC,wB,CiFvhPA,iB,CAC0C,e,CAC1C,kB,CAAoC,e,CACpC,sB,CAAA,2B,CAAwC,e,CACxC,iB,CAAmC,e,CACnC,oB,CAAsC,e,CACtC,kB,CAAA,sB,CAAoC,e,CACpC,oB,CAAsC,e,CACtC,2B,CAA6C,e,CAC7C,e,CAAiC,e,CjFmjPjC,mB,CiFljPA,wB,CACqC,e,CACrC,c,CAAgC,e,CAChC,qB,CAAuC,e,CACvC,e,CAAA,mC,CAAA,mB,CAAA,sB,CAAA,iC,CAAiC,e,CACjC,qB,CAAuC,e,CACvC,iB,CAAmC,e,CACnC,e,CAAiC,e,CACjC,sB,CAAwC,e,CACxC,e,CAAiC,e,CACjC,qB,CAAuC,e,CACvC,iB,CAAmC,e,CACnC,wB,CAA0C,e,CAC1C,kB,CAAoC,e,CACpC,wB,CAA0C,e,CAC1C,sB,CAAwC,e,CACxC,kB,CAAoC,e,CACpC,oB,CAAsC,e,CACtC,oB,CAAsC,e,CACtC,qB,CAAA,8B,CAAuC,e,CACvC,uB,CAAyC,e,CACzC,gB,CAAA,sB,CAAA,uB,CAAA,2B,CAAA,+B,CAAA,yB,CAAA,4B,CAAA,0B,CAAA,yB,CAAkC,e,CAClC,oB,CAAsC,e,CACtC,a,CAA+B,e,CAC/B,qB,CAAuC,e,CACvC,sB,CAAwC,e,CACxC,wB,CAA0C,e,CAC1C,qB,CAAA,yB,CAAuC,e,CACvC,oB,CAAA,4C,CAAsC,e,CACtC,qB,CAAuC,e,CACvC,iB,CAAmC,e,CACnC,wB,CAA0C,e,CAC1C,qB,CAAA,0B,CAAuC,e,CACvC,oB,CAAA,yB,CAAsC,e,CACtC,kB,CAAoC,e,CACpC,c,CAAgC,e,CAChC,kB,CAAoC,e,CACpC,oB,CAAsC,e,CACtC,a,CAA+B,e,CjFsqP/B,c,CiFrqPA,iB,CjFoqPA,iB,CiFlqPgC,e,CAChC,mB,CAAqC,e,CACrC,qB,CAAuC,e,CACvC,yB,CAA2C,e,CAC3C,mB,CAAqC,e,CACrC,mB,CAAqC,e,CACrC,kB,CAAoC,e,CACpC,iB,CAAmC,e,CACnC,uB,CAAyC,e,CACzC,sB,CAAwC,e,CACxC,mB,CAAqC,e,CACrC,oB,CAAsC,e,CACtC,0B,CAA4C,e,CAC5C,kB,CAAoC,e,CACpC,e,CAAA,yB,CAAiC,e,CACjC,sB,CAAwC,e,CACxC,qB,CAAuC,e,CACvC,sB,CAAwC,e,CACxC,oB,CAAA,sB,CAAA,qC,CAAsC,e,CACtC,gB,CAAkC,e,CAClC,e,CAAiC,e,CACjC,kB,CAAoC,e,CACpC,mB,CjFsuPA,sB,CiFruPwC,e,CACxC,0B,CAA4C,e,CAC5C,uB,CAAyC,e,CACzC,sB,CAAwC,e,CACxC,qB,CAAuC,e,CACvC,sB,CAAwC,e,CACxC,wB,CAA0C,e,CAC1C,wB,CAA0C,e,CAC1C,iB,CAAmC,e,CACnC,qB,CAAuC,e,CACvC,4B,CAA8C,e,CAC9C,sB,CAAwC,e,CACxC,mB,CAAqC,e,CACrC,iB,CAAA,wB,CAAA,yB,CAAA,6B,CAAA,2B,CAAA,4B,CAAA,oB,CAAmC,e,CACnC,oB,CAAsC,e,CACtC,qB,CAAuC,e,CjFuxPvC,c,CiFtxPA,gB,CACgC,e,CAChC,kB,CAAoC,e,CACpC,gB,CAAkC,e,CAClC,iB,CAAmC,e,CACnC,iB,CAAmC,e,CjFsyPnC,uB,CiFryPA,a,CACyC,e,CACzC,wB,CAA0C,e,CAC1C,mB,CAAqC,e,CACrC,uB,CAAyC,e,CACzC,oB,CjFkzPA,uB,CADA,kB,CiF/yPyC,e,CACzC,oB,CjFozPA,iC,CiFnzPmD,e,CACnD,oB,CjFuzPA,uB,CiFtzPyC,e,CACzC,oB,CjF0zPA,0B,CiFzzP4C,e,CAC5C,oB,CjF6zPA,wB,CiF5zP0C,e,CAC1C,wB,CAA0C,e,CAC1C,mB,CAAqC,e,CACrC,uB,CAAA,qB,CAAyC,e,CACzC,yB,CAA2C,e,CAC3C,sB,CAAwC,e,CACxC,wB,CAA0C,e,CAC1C,iB,CAAmC,e,CACnC,yB,CAA2C,e,CAC3C,gB,CAAA,uB,CAAkC,e,CAClC,wB,CAAA,qB,CAA0C,e,CAC1C,sB,CAAwC,e,CACxC,sB,CjFi2PA,0B,CiFh2P4C,e,CAC5C,sB,CjFo2PA,yB,CiFn2P2C,e,CAC3C,sB,CjFu2PA,wB,CiFt2P0C,e,CAC1C,oB,CAAsC,e,CACtC,sB,CjF62PA,sB,CiF52PwC,e,CjFi3PxC,uB,CiFh3PA,sB,CACyC,e,CACzC,0B,CAA4C,e,CAC5C,wB,CAA0C,e,CAC1C,uB,CAAyC,e,CACzC,yB,CAA2C,e,CAC3C,uB,CAAyC,e,CACzC,oB,CAAsC,e,CACtC,qB,CAAuC,e,CACvC,2B,CAA6C,e,CAC7C,a,CAA+B,e,CAC/B,oB,CAAsC,e,CACtC,sB,CAAwC,e,CACxC,wB,CAA0C,e,CAC1C,+B,CAAiD,e,CACjD,qB,CAAuC,e,CACvC,sB,CAAwC,e,CACxC,iB,CAAmC,e,CACnC,iB,CAAmC,e,CACnC,kB,CAAoC,e,CACpC,gB,CAAkC,e,CAClC,4B,CAA8C,e,CjFg7P9C,qB,CiF/6PA,a,CACuC,e,CACvC,iB,CAAmC,e,CACnC,gB,CAAkC,e,CAClC,iB,CAAmC,e,CACnC,0B,CAA4C,e,CAC5C,2B,CAA6C,e,CAC7C,2B,CAA6C,e,CAC7C,2B,CAA6C,e,CAC7C,mB,CAAqC,e,CACrC,kB,CAAoC,e,CACpC,oB,CAAA,sC,CAAsC,e,CACtC,gB,CAAkC,e,CAClC,c,CAAgC,e,CAChC,qB,CAAuC,e,CACvC,uB,CAAyC,e,CACzC,gB,CAAkC,e,CAClC,gB,CAAkC,e,CAClC,oB,CAAsC,e,CACtC,oB,CAAsC,e,CACtC,uB,CAAyC,e,CACzC,e,CAAiC,e,CACjC,0B,CAA4C,e,CAC5C,mB,CAAqC,e,CACrC,e,CAAiC,e,CACjC,uB,CAAyC,e,CACzC,c,CAAgC,e,CAChC,uB,CAAyC,e,CACzC,mB,CAAqC,e,CACrC,iB,CAAmC,e,CACnC,uB,CAAyC,e,CACzC,yB,CAA2C,e,CAC3C,sB,CAAwC,e,CACxC,wB,CAA0C,e,CAC1C,uB,CAAyC,e,CACzC,0B,CAA4C,e,CAC5C,kB,CAAoC,e,CACpC,oB,CAAsC,e,CACtC,sB,CAAwC,e,CACxC,kB,CAAoC,e,CACpC,iB,CAAmC,e,CACnC,qB,CAAuC,e,CACvC,kB,CAAA,0B,CAAoC,e,CACpC,iB,CAAmC,e,CACnC,2B,CAA6C,e,CAC7C,yB,CAA2C,e,CAC3C,4B,CAA8C,e,CAC9C,gB,CAAkC,e,CAClC,4B,CAA8C,e,CAC9C,+B,CAAiD,e,CACjD,kB,CAAoC,e,CACpC,sC,CAAwD,e,CjFykQxD,8C,CiFxkQA,2B,CACgE,e,CjF6kQhE,e,CiF5kQA,mB,CjF2kQA,0B,CiFzkQiC,e,CACjC,gB,CAAkC,e,CAClC,kB,CAAoC,e,CjFqlQpC,wB,CiFplQA,kB,CAC0C,e,CAC1C,qB,CAAuC,e,CACvC,iB,CAAmC,e,CACnC,wB,CAA0C,e,CAC1C,mB,CAAqC,e,CACrC,yB,CAA2C,e,CAC3C,0B,CAA4C,e,CAC5C,qB,CAAuC,e,CACvC,sB,CAAwC,e,CACxC,gB,CAAkC,e,CAClC,oB,CAAsC,e,CACtC,6B,CjFqnQA,+B,CiFpnQiD,e,CACjD,a,CjFwnQA,uB,CiFvnQyC,e,CACzC,sB,CAAwC,e,CACxC,wB,CAA0C,e,CAC1C,0B,CAA4C,e,CAC5C,iB,CAAmC,e,CACnC,uB,CAAyC,e,CACzC,yB,CAA2C,e,CjF8oQ3C,uB,CiF7oQA,gB,CACyC,e,CjFipQzC,yB,CiFhpQA,kB,CAC2C,e,CAC3C,sB,CAAwC,e,CACxC,wB,CAA0C,e,CAC1C,iB,CAAmC,e,CACnC,mB,CAAqC,e,CACrC,0B,CjF+pQA,kB,CiF9pQoC,e,CACpC,4B,CjFkqQA,oB,CiFjqQsC,e,CACtC,gB,CAAkC,e,CAClC,yB,CAA2C,e,CAC3C,mB,CAAqC,e,CACrC,wB,CjF+qQA,2B,CADA,sB,CAEA,+B,CiF9qQ6C,e,CAC7C,wB,CjFkrQA,qC,CiFjrQuD,e,CACvD,wB,CjFqrQA,2B,CiFprQ6C,e,CAC7C,wB,CjFwrQA,8B,CiFvrQgD,e,CAChD,wB,CjF2rQA,4B,CiF1rQ8C,e,CAC9C,iB,CAAmC,e,CjFmsQnC,e,CiFlsQA,kB,CjFisQA,c,CiF/rQiC,e,CACjC,kB,CAAoC,e,CACpC,0B,CAA4C,e,CAC5C,0B,CAA4C,e,CAC5C,yB,CAA2C,e,CAC3C,0B,CjFgtQA,uB,CiF/sQyC,e,CACzC,4B,CjFmtQA,yB,CiFltQ2C,e,CAC3C,mB,CAAqC,e,CACrC,e,CAAiC,e,CACjC,e,CAAiC,e,CACjC,e,CAAiC,e,CACjC,kB,CAAoC,e,CACpC,kB,CAAoC,e,CACpC,oB,CAAA,4B,CAAA,mB,CAAA,mB,CAAA,oB,CAAsC,e,CACtC,sB,CAAA,sB,CAAwC,e,CACxC,sB,CAAwC,e,CACxC,qB,CAAuC,e,CACvC,iB,CAAmC,e,CCjxBnC,Q,CH8BE,iB,CACA,S,CACA,U,CACA,S,CACA,W,CACA,e,CACA,kB,CACA,Q,CAUA,yB,CAAA,wB,CAEE,e,CACA,U,CACA,W,CACA,Q,CACA,gB,CACA,S;;;;;;;;;;;;;;;AI+OJ,2CACC,E,CAAO,S,CACP,E,CAAK,W,AAEN,mCACC,E,CAAO,S,CACP,E,CAAK,W,AC5RN,iCACC,E,CAAK,+B,CAAA,yB,AAEN,yCACC,E,CAAK,iC,ACPN,WACE,uB,CACA,yB,CACA,0L,CAIA,e,CACA,kB,AAGF,qDACE,WACE,uB,CACA,oDAIJ,kB,CAAqB,uB,CrF8hSrB,oB,CACA,wB,CAEA,wB,CADA,oB,CAEA,oB,CACA,mB,CACA,sB,CACA,gB,CACA,kB,CACA,qB,CACA,uB,CACA,iB,CACA,sB,CACA,c,CACA,sB,CACA,mB,CAEA,oB,CACA,wB,CACA,oB,CACA,wB,CACA,sB,CACA,mB,CAGA,qB,CADA,iB,CADA,gB,CAGA,e,CAGA,0B,CADA,yB,CADA,qB,CAGA,mB,CAEA,mB,CAEA,sB,CACA,mB,CACA,gB,CACA,mB,CACA,oB,CACA,mB,CAEA,qB,CACA,oB,CAEA,yB,CACA,mB,CAEA,kB,CACA,gB,CACA,kB,CAEA,mB,CADA,e,CAGA,uB,CACA,wB,CACA,8B,CAHA,mB,CAIA,mB,CAEA,uB,CADA,mB,CAEA,kB,CAEA,qB,CADA,iB,CAEA,mB,CACA,oB,CACA,mB,CAGA,sB,CADA,kB,CADA,iB,CAGA,mB,CAEA,sB,CACA,sB,CAFA,iB,CAIA,2B,CADA,uB,CAEA,kB,CACA,mB,CACA,gB,CACA,oB,CACA,uB,CACA,uB,CAEA,oB,CACA,oB,CACA,oB,CACA,kB,CACA,uB,CACA,0B,CACA,6B,CACA,mC,CACA,oB,CACA,kB,CAEA,sB,CADA,kB,CAEA,mB,CAIA,uB,CADA,sB,CADA,kB,CAGA,mB,CACA,gB,CACA,iB,CACA,sB,CAGA,uB,CAFA,mB,CAGA,gB,CAEA,iB,CACA,sB,CACA,sB,CACA,wB,CAEA,oB,CADA,gB,CAGA,8B,CADA,0B,CAEA,kB,CAEA,yB,CADA,qB,CAEA,mB,CACA,wB,CACA,oB,CACA,mB,CAEA,kB,CAGA,8B,CADA,0B,CADA,iB,CAGA,iB,CACA,iB,CACA,sB,CAEA,sB,CADA,kB,CAGA,uB,CADA,mB,CAEA,kB,CACA,uB,CACA,oB,CAEA,qB,CACA,mB,CACA,iB,CAEA,gB,CACA,oB,CACA,mB,CACA,mB,CAEA,kB,CACA,qB,CACA,sB,CACA,gB,CAtIA,sB,CAeA,sB,CAEA,sB,CAOA,sB,CAGA,uB,CAGA,sB,CAkCA,0B,CAcA,sB,CASA,sB,CAGA,mB,CAgBA,sB,CAeA,uB,CAIA,oB,CAKA,sB,CqFhrSA,kB,CA4IE,oB,CACA,uB,CACA,iB,CACA,e,CACA,mB,CACA,a,CACA,uB,CACA,iC,CACA,mB,CACA,iC,CACA,kC,CACA,0B,CAGF,oB,CAAuB,e,CACvB,wB,CAA2B,e,CAC3B,oB,CAAuB,e,CACvB,wB,CAA2B,e,CAC3B,oB,CAAuB,e,CACvB,mB,CAAsB,e,CACtB,sB,CAAyB,e,CACzB,gB,CAAmB,e,CACnB,kB,CAAqB,e,CACrB,qB,CAAwB,e,CACxB,uB,CAA0B,e,CAC1B,iB,CAAoB,e,CACpB,sB,CAAyB,e,CACzB,c,CAAiB,e,CACjB,sB,CAAyB,e,CACzB,mB,CAAA,sB,CAAsB,e,CACtB,oB,CAAuB,e,CACvB,wB,CAA2B,e,CAC3B,oB,CAAuB,e,CACvB,wB,CAA2B,e,CAC3B,sB,CAAyB,e,CACzB,mB,CAAsB,e,CACtB,gB,CAAmB,e,CACnB,iB,CAAoB,e,CACpB,qB,CAAwB,e,CACxB,e,CAAkB,e,CAClB,qB,CAAwB,e,CACxB,yB,CAA4B,e,CAC5B,0B,CAA6B,e,CAC7B,mB,CAAA,sB,CAAsB,e,CACtB,mB,CAAA,sB,CAAsB,e,CACtB,sB,CAAyB,e,CACzB,mB,CAAsB,e,CACtB,gB,CAAmB,e,CACnB,mB,CAAsB,e,CACtB,oB,CAAuB,e,CACvB,mB,CAAA,sB,CAAsB,e,CACtB,qB,CAAwB,e,CACxB,oB,CAAA,uB,CAAuB,e,CACvB,yB,CAA4B,e,CAC5B,mB,CAAA,sB,CAAsB,e,CACtB,kB,CAAqB,e,CACrB,gB,CAAmB,e,CACnB,kB,CAAqB,e,CACrB,e,CAAkB,e,CAClB,mB,CAAsB,e,CACtB,mB,CAAsB,e,CACtB,uB,CAA0B,e,CAC1B,wB,CAA2B,e,CAC3B,8B,CAAiC,e,CACjC,mB,CAAsB,e,CACtB,mB,CAAsB,e,CACtB,uB,CAA0B,e,CAC1B,kB,CAAqB,e,CACrB,iB,CAAoB,e,CACpB,qB,CAAwB,e,CACxB,mB,CAAsB,e,CACtB,oB,CAAuB,e,CACvB,mB,CAAsB,e,CACtB,iB,CAAoB,e,CACpB,kB,CAAqB,e,CACrB,sB,CAAyB,e,CACzB,mB,CAAsB,e,CACtB,iB,CAAoB,e,CACpB,sB,CAAyB,e,CACzB,sB,CAAyB,e,CACzB,uB,CAA0B,e,CAC1B,2B,CAA8B,e,CAC9B,kB,CAAqB,e,CACrB,mB,CAAsB,e,CACtB,gB,CAAmB,e,CACnB,oB,CAAuB,e,CACvB,uB,CAA0B,e,CAC1B,uB,CAAA,0B,CAA0B,e,CAC1B,oB,CAAuB,e,CACvB,oB,CAAuB,e,CACvB,oB,CAAuB,e,CACvB,kB,CAAqB,e,CACrB,uB,CAA0B,e,CAC1B,0B,CAA6B,e,CAC7B,6B,CAAgC,e,CAChC,mC,CAAsC,e,CACtC,oB,CAAuB,e,CACvB,kB,CAAqB,e,CACrB,kB,CAAqB,e,CACrB,sB,CAAyB,e,CACzB,mB,CAAA,sB,CAAsB,e,CACtB,kB,CAAqB,e,CACrB,sB,CAAyB,e,CACzB,uB,CAA0B,e,CAC1B,mB,CAAsB,e,CACtB,gB,CAAmB,e,CACnB,iB,CAAoB,e,CACpB,sB,CAAyB,e,CACzB,mB,CAAA,sB,CAAsB,e,CACtB,uB,CAA0B,e,CAC1B,gB,CAAA,mB,CAAmB,e,CACnB,iB,CAAoB,e,CACpB,sB,CAAyB,e,CACzB,sB,CAAyB,e,CACzB,wB,CAA2B,e,CAC3B,gB,CAAmB,e,CACnB,oB,CAAuB,e,CACvB,0B,CAA6B,e,CAC7B,8B,CAAiC,e,CACjC,kB,CAAqB,e,CACrB,qB,CAAwB,e,CACxB,yB,CAA4B,e,CAC5B,mB,CAAsB,e,CACtB,wB,CAA2B,e,CAC3B,oB,CAAuB,e,CACvB,mB,CAAA,sB,CAAsB,e,CACtB,kB,CAAqB,e,CACrB,iB,CAAoB,e,CACpB,0B,CAA6B,e,CAC7B,8B,CAAiC,e,CACjC,iB,CAAoB,e,CACpB,iB,CAAoB,e,CACpB,sB,CAAyB,e,CACzB,kB,CAAqB,e,CACrB,sB,CAAyB,e,CACzB,mB,CAAsB,e,CACtB,uB,CAA0B,e,CAC1B,kB,CAAqB,e,CACrB,uB,CAA0B,e,CAC1B,oB,CAAA,uB,CAAuB,e,CACvB,qB,CAAwB,e,CACxB,mB,CAAsB,e,CACtB,iB,CAAA,oB,CAAoB,e,CACpB,gB,CAAmB,e,CACnB,oB,CAAuB,e,CACvB,mB,CAAsB,e,CACtB,mB,CAAA,sB,CAAsB,e,CACtB,kB,CAAqB,e,CACrB,qB,CAAwB,e,CACxB,sB,CAAyB,e,CACzB,gB,CAAmB,e,CC/MjB,S,CAxDA,mB,CACA,oB,CACA,gB,CACA,a,CtFitTF,uB,CsFxpTE,wB,CArEA,a,CAKA,Y,CtF8tTF,yB,CsFzpTE,uB,CAEE,yB,CASF,8B,CANA,gC,CAhGA,oB,CAIA,0B,CAGE,e,CA4FA,iB,CAGF,8B,CAtGA,sB,CA4GA,8B,CA5GA,oB,CAIA,wB,CAKE,gB,CAsGA,e,CAqBF,iE,CAlBA,4B,CAlHA,oB,CAIA,0B,CAGE,e,CA8GA,iB,CASF,4C,CANA,8C,CAxHA,oB,CAIA,sB,CAOE,iB,CAgHA,iB,CAGF,4C,CA9HA,sB,CA0IA,+D,CA1IA,sB,CAIA,0B,CAGE,e,CAsIA,iB,CAGF,+D,CAhJA,kB,CAIA,wB,CAKE,gB,CA2IA,e,CAGF,6D,CAvJA,kB,CAIA,0B,CAGE,e,CAmJA,e,CAGF,Q,CA5HA,qB,CACA,gB,CAGE,oB,CA4HF,mB,CACE,S,CAGF,S,CA1HA,oB,CA8HA,Q,CA1HA,S,CA8HA,Q,CArHA,W,CACA,e,CAwHA,O,CApHA,S,CAwHA,e,CAnHA,S,CACA,iB,CAIA,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CALF,oB,CAAA,qB,CAAA,sB,CAAA,4B,CACE,c,CAGF,qB,CAAA,0B,CACE,Y,CA6HE,iB,CAAA,kB,CAAA,kB,CAAA,gB,CAAA,iB,CAAA,e,CAAA,e,CAAA,e,CAAA,iB,CAAA,gB,CAAA,iB,CAAA,e,CAAA,e,CAAA,U,CAAA,iB,CAAA,kB,CAAA,U,CAxOJ,a,CACA,iB,CACA,U,CAEA,iB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,mB,CAGF,gB,CACE,U,CACA,a,CACA,U,CAGF,qB,CAAA,sB,CAAA,sB,CAAA,oB,CAAA,qB,CAAA,mB,CAAA,mB,CAAA,mB,CAAA,qB,CAAA,oB,CAAA,qB,CAAA,mB,CAAA,mB,CAAA,c,CAAA,qB,CAAA,sB,CAAA,c,CACE,a,CACA,iB,CACA,K,CACA,M,CAnBF,uB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,qB,CAGF,sB,CACE,U,CACA,a,CACA,U,CAZF,uB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,6B,CAGF,sB,CACE,U,CACA,a,CACA,U,CAZF,sB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,6B,CAGF,qB,CACE,U,CACA,a,CACA,U,CAZF,sB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,kB,CAGF,qB,CACE,U,CACA,a,CACA,U,CAZF,yB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,kB,CAGF,wB,CACE,U,CACA,a,CACA,U,CAZF,wB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,6B,CAGF,uB,CACE,U,CACA,a,CACA,U,CAZF,sB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,oB,CAGF,qB,CACE,U,CACA,a,CACA,U,CAZF,yB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,4B,CAGF,wB,CACE,U,CACA,a,CACA,U,CAZF,sB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,kB,CAGF,qB,CACE,U,CACA,a,CACA,U,CAZF,wB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,qB,CAGF,uB,CACE,U,CACA,a,CACA,U,CAZF,wB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,6B,CAGF,uB,CACE,U,CACA,a,CACA,U,CAZF,iB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,kB,CAGF,gB,CACE,U,CACA,a,CACA,U,CAZF,sB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,kB,CAGF,qB,CACE,U,CACA,a,CACA,U,CAZF,yB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,oB,CAGF,wB,CACE,U,CACA,a,CACA,U,CAZF,wB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,6B,CAGF,uB,CACE,U,CACA,a,CACA,U,CAZF,wB,CACE,a,CACA,U,CACA,U,CACA,O,CACA,Q,CACA,kB,CAGF,uB,CACE,U,CACA,a,CACA,U,CCIJ,S,CACE,Y,CACA,6B,CAMF,wB,CACE,Y,CAIF,Q,CACE,gB,CAGF,O,CACE,gB,CAGF,S,CACE,iB,CACA,0B,CAGF,e,CACE,2B,CACA,iB,CAGF,W,CACE,iB,CACA,oB,CACA,a,CACA,gB,CACA,kB,CACA,U,CACA,iB,CACA,mB,CACA,U,CACA,e,CAGA,kB,CACE,Y,CACA,Q,CACA,Q,CACA,wB,CACA,U,CACA,Q,CACA,O,CACA,mB,CAEA,4C,CACA,gB,CACA,gB,CAGF,gB,CACE,a,CACA,S,CACA,iB,CAMJ,U,CACE,Q,CACA,kB,CAEA,a,CACE,iB,CACA,iB,CACA,oB,CACA,oB,CACA,iB,CACA,c,CAGF,oB,CACE,oB,CACA,S,CACA,U,CACA,M,CACA,U,CACA,4B,CACA,iB,CACA,iB,CAGF,6B,CACE,c,CAGF,2B,CACE,iB,CACA,K,CACA,O,CAIA,8B,CACE,wB,CACA,oB,CAFF,8B,CACE,wB,CACA,oB,CAFF,8B,CACE,wB,CACA,oB,CAFF,8B,CACE,wB,CACA,oB,CAFF,8B,CACE,wB,CACA,oB,CAFF,8B,CACE,wB,CACA,oB,CAFF,8B,CACE,wB,CACA,oB,CAFF,8B,CACE,wB,CACA,oB,CAFF,8B,CACE,wB,CACA,oB,CAFF,8B,CACE,wB,CACA,oB,CAFF,+B,CACE,wB,CACA,oB,CAFF,+B,CACE,wB,CACA,oB,CAFF,+B,CACE,wB,CACA,oB,CAFF,+B,CACE,wB,CACA,oB,CAFF,+B,CACE,wB,CACA,oB,CCzHN,K,CAEE,e,CACA,yC,CACA,iB,CAGF,wB,CACE,e,CACA,yC,CACA,iB,CAGF,kC,CACE,kB,CACA,iB,CAGF,qC,CACE,kB,CACA,iB,CAGF,yC,CACE,kB,CACA,iB,CAGF,qB,CACE,iB,CAGF,wC,CACE,kB,CAGF,4C,CACE,kB,CAGF,gD,CACE,kB,CC0oCA,Y,CAGE,U,CC3rCJ,M,CAEE,qB,CACA,U,CACA,0C,CACA,c,CACA,iB,CAGF,c,CACE,wB,CACA,0B,CACA,U,CACA,oB,CACA,0B,CAGF,wB,CACE,wB,CAGF,qB,CACE,4C,CAGF,oB,CACE,U,CAKF,O,CAEE,qB,CACA,Y,CACA,U,CACA,0C,CAGF,e,CACE,wB,CADF,e,CAAA,iB,CAAA,kB,CAAA,Y,CAEE,W,CACA,oB,CACA,0B,CAGF,Y,CAEE,wB,CAGF,kB,CAEE,wB,CAGF,iB,CAEE,wB,C1EFE,yBsDVF,I,CACE,iB,AtDSA,yBsDJF,I,CACE,iB,AtDGA,yBsDEF,I,CACE,oBqBrCJ,mC,CACE,e,CACA,wB,CAFF,mC,CAWA,6B,CAEE,Y,CAGQ,kB,CAEA,kB,CAGV,6C,CACE,oB,CACA,c,CACA,kB,CACA,sB,CACA,e,CAGF,sC,C3FooVA,mC,C2FloVE,iB,CACA,W,CAEF,mC,CACE,sB,CACA,kB,CAGF,oD,C3FqoVA,iD,C2FnoVE,gB,CAEF,8C,CACE,c,CAGF,qD,CAEE,Y,CAEQ,kB,CAEV,4C,CAEU,a,CACR,U,CACA,S,CACA,iB,CR3EF,O,CACC,iB,CAGA,gD,CnFquVD,mD,CmFnuVE,sB,CAED,wB,CACC,sB,CAED,yB,CACC,sB,CAID,O,CAAA,W,CAAA,a,CAAA,Y,CS2BA,qB,CTlBC,sC,CACC,c,CACA,mB,CAGD,mC,CACC,wB,CACA,yC,CACC,e,CAMF,6C,CAoJA,+B,CAnJC,W,CAGD,qCAAA,yB,CACC,W,CAIF,+B,CS3BA,4B,CACA,2B,CT4BC,e,CACA,iC,CAGA,6C,CACC,Q,CACA,yC,CACA,sB,CAIF,kC,CACC,e,CAGD,uBAAA,yB,CACC,iC,CACA,qE,CAID,2E,CACC,kB,CAKA,kF,CAAA,oG,CACC,U,CAED,mF,CAAA,qG,CACC,c,CACA,oB,CAEA,yF,CAAA,yF,CAAA,2G,CAAA,2G,CAEC,U,CACA,S,CACA,yB,CAGD,yF,CAAA,2G,CACC,e,CAMH,iD,CACC,S,CnF0sVF,8C,CmFvsVC,6B,CAEC,qB,CAED,mB,CACC,a,CACA,gB,CAMF,e,CACC,qB,CAGA,qB,CACA,U,CACA,c,CACA,a,CACA,gB,CACA,wB,CACA,W,CACA,S,CACA,e,CACA,iB,CACA,U,CAEA,qB,CACC,kC,CAGD,mC,CACC,S,CACA,e,CnFssVF,6C,CmFjsVA,mB,CAEC,Q,CAEA,M,CACA,gB,CACA,iB,CACA,kB,CACA,iB,CACA,O,CACA,K,CAGA,c,CACA,e,CACA,sB,CACA,kB,CAMD,a,CAEC,W,CACA,iB,CACA,kB,CACA,qB,CAEA,mB,CACC,U,CACA,c,CACA,Q,CACA,e,CACA,c,CACA,oB,CACA,mB,CACA,iB,CAEA,Q,CACA,S,CAEA,gB,CACA,mB,CACA,uB,CAUF,oBAAA,6B,CACC,S,CAID,oB,CACC,c,CACA,kB,CAEA,iB,CAEA,U,CAUD,kB,CARA,e,CARA,oB,CAqBC,iB,CAEA,qB,CAfD,e,CS7MC,W,CRDA,qB,CACA,iB,CACA,qB,CACA,uB,CACA,oB,CQ6BA,6D,CAEA,qD,CAnCA,U,CTsND,kB,CSrLC,+C,CAEA,uC,CTqLA,U,CACA,c,CACA,kB,CAEA,iB,CAEA,U,CAEA,wB,CACC,a,CAGF,a,CAEC,c,CACA,a,CAED,iC,CACC,U,CAGD,0C,CATA,a,CAUE,oB,CAEF,yB,CACC,iB,CACA,oB,CACA,U,CACA,S,CACA,W,CACA,kB,CACA,e,CACA,U,CAMD,kB,CACC,c,CACA,kB,CACA,iB,CACA,iB,CACA,qB,CACA,U,CACA,iB,CAEA,+B,CACC,e,CACA,gB,CAIF,a,CACC,yC,CACA,kB,CACA,0B,CACA,oB,CACA,Q,CACA,O,CACA,iB,CUtRD,kB,CDqBC,8B,CACA,6B,CChBA,qB,CACA,qB,CACA,wB,CACA,kC,CACA,qB,CACA,e,CACA,gB,CACA,iB,CACA,M,CACA,Q,CACA,U,CACA,Y,CACA,gC,CAMD,Y,CACC,gB,CACA,e,CAMD,c,CACC,qB,CACA,qB,CACA,U,CACA,c,CACA,a,CACA,gB,CAEA,yB,CDnBA,8B,CACA,6B,CCsBA,0B,CACC,wB,CACA,U,CAGD,yB,CACC,wB,CACA,U,CAGD,0B,CACC,U,CACA,c,CAQF,iB,CACC,qB,CACA,U,CACA,c,CACA,a,CACA,gB,CClEA,4B,CACC,qB,CAEA,gB,CACA,S,CAED,wC,CACC,a,CACA,iB,CAID,sC,CACC,e,CAID,4B,CACC,wB,CACA,iB,CACA,wB,CACA,U,CACA,oB,CACA,c,CACA,e,CACA,c,CACA,kB,CAID,iC,C9FihWD,kC,C8F/gWE,oB,CACA,qB,CAID,kC,CFxBA,8B,CACA,2B,CEyBC,c,CACA,e,CAED,mC,CACC,U,CACA,c,CACA,oB,CAEA,yC,CxBgOA,wB,CwB/NC,yB,CAKF,iC,CACC,c,CF/BD,6B,CACA,0B,CEgCC,8B,CAGA,mB,CAEA,uC,CAAA,uC,CAEC,wB,CACA,a,CAED,wC,CACC,wB,CAKD,wC,CACE,a,CACA,gB,CAEF,6C,CACC,iB,CACA,6B,CAMF,wC,CACC,wB,CACA,wB,CACA,U,CAGD,6C,CACC,kB,CACA,8B,CAEA,oD,CAAA,mD,CAAA,mD,CAGC,wB,CxBhCH,c,CACE,U,CAGF,mB,CACE,a,CAGF,e,CACE,mB,CAIF,6C,CACE,c,CACA,e,CACA,U,CAGF,mB,CACE,U,CAGF,6C,CACE,U,CAGF,c,CACE,mB,CAGF,O,CACE,Y,CAGF,kB,CACE,iB,CAGF,oB,CACE,wB,CA6BF,a,CACE,iB,CAGF,S,CACE,e,CAKF,S,CACE,a,CAGF,Q,CACE,c,CACA,iB,CAKF,O,CACE,e,CAKF,Q,CtE+gWA,Y,CsE7gWE,kB,CACA,U,CAIA,U,CACE,a,CAGF,e,CACE,wB,CACA,a,CAIJ,a,CAWA,Y,CAOE,yB,CAAA,iB,CAlBF,a,CACE,c,CACA,iB,CAGA,mB,CACE,wB,CACA,U,CAIJ,Y,CACE,S,CACA,S,CACA,iB,CACA,K,CACA,sB,CACA,iB,CAEA,Y,CAGF,gC,CACE,S,CACA,kB,CAIF,Y,CACE,kB,CAKF,iB,CACE,wB,CACA,sB,CACA,Y,CACA,qB,CACA,c,CACA,wB,CACA,iB,CACA,U,CACA,Q,CAGF,Y,CACE,iB,CACA,qB,CACA,e,CACA,W,CAMA,S,CACA,oB,CACE,kB,CACA,oB,CACA,a,CAEF,iB,CACE,kB,CACA,oB,CACA,a,CAEF,kB,CACE,kB,CACA,oB,CACA,a,CAIJ,c,CACE,W,CAGF,a,CACE,e,CAKF,kB,CACE,kB,CAEA,wB,CAAA,oB,CAAA,gB,CAGF,mB,CACE,c,CAOF,U,CtEmgWA,a,CsEjgWE,gB,CACA,a,CACA,oB,CACA,kB,CACA,yB,CAEA,a,CtEmgWF,gB,CsElgWI,kB,CAEA,wB,CtEogWJ,2B,CsEngWM,e,CAGF,oB,CtEogWJ,uB,CsEngWM,a,CACA,a,CAGF,kB,CtEogWJ,qB,CsEngWM,U","file":"index.css","sourcesContent":["@charset \"UTF-8\";\n/*!\n * Bootstrap v4.0.0-alpha.5 (https://getbootstrap.com)\n * Copyright 2011-2016 The Bootstrap Authors\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v4.2.0 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n}\n\nbody {\n  margin: 0;\n}\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n}\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\ntemplate,\n[hidden] {\n  display: none;\n}\n\na {\n  background-color: transparent;\n  -webkit-text-decoration-skip: objects;\n}\n\na:active,\na:hover {\n  outline-width: 0;\n}\n\nabbr[title] {\n  border-bottom: none;\n  text-decoration: underline;\n  text-decoration: underline dotted;\n}\n\nb,\nstrong {\n  font-weight: inherit;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\ndfn {\n  font-style: italic;\n}\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\nmark {\n  background-color: #ff0;\n  color: #000;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\nimg {\n  border-style: none;\n}\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\nfigure {\n  margin: 1em 40px;\n}\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font: inherit;\n  margin: 0;\n}\n\noptgroup {\n  font-weight: bold;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nbutton,\nhtml [type=button],\n[type=reset],\n[type=submit] {\n  -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=button]::-moz-focus-inner,\n[type=reset]::-moz-focus-inner,\n[type=submit]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\nbutton:-moz-focusring,\n[type=button]:-moz-focusring,\n[type=reset]:-moz-focusring,\n[type=submit]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\nlegend {\n  box-sizing: border-box;\n  color: inherit;\n  display: table;\n  max-width: 100%;\n  padding: 0;\n  white-space: normal;\n}\n\ntextarea {\n  overflow: auto;\n}\n\n[type=checkbox],\n[type=radio] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\n[type=number]::-webkit-inner-spin-button,\n[type=number]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=search] {\n  -webkit-appearance: textfield;\n  outline-offset: -2px;\n}\n\n[type=search]::-webkit-search-cancel-button,\n[type=search]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-input-placeholder {\n  color: inherit;\n  opacity: 0.54;\n}\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  font: inherit;\n}\n\n@media print {\n  *,\n  *::before,\n  *::after,\n  *::first-letter,\n  p::first-line,\n  div::first-line,\n  blockquote::first-line,\n  li::first-line {\n    text-shadow: none !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  abbr[title]::after {\n    content: \" (\" attr(title) \")\";\n  }\n  pre {\n    white-space: pre-wrap !important;\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .tag {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\nhtml {\n  box-sizing: border-box;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: inherit;\n}\n\n@-ms-viewport {\n  width: device-width;\n}\nhtml {\n  font-size: 16px;\n  -ms-overflow-style: scrollbar;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  font-size: 1rem;\n  line-height: 1.5;\n  color: #373a3c;\n  background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n  outline: none !important;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #818a91;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: bold;\n}\n\ndd {\n  margin-bottom: 0.5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\na {\n  color: #366e98;\n  text-decoration: none;\n}\na:focus, a:hover {\n  color: rgb(33.9466019417, 69.1504854369, 95.5533980583);\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\na:not([href]):not([tabindex]) {\n  color: inherit;\n  text-decoration: none;\n}\na:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {\n  color: inherit;\n  text-decoration: none;\n}\na:not([href]):not([tabindex]):focus {\n  outline: none;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n}\n\n[role=button] {\n  cursor: pointer;\n}\n\na,\narea,\nbutton,\n[role=button],\ninput,\nlabel,\nselect,\nsummary,\ntextarea {\n  touch-action: manipulation;\n}\n\ntable {\n  border-collapse: collapse;\n  background-color: transparent;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #818a91;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: left;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 0.5rem;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\ntextarea {\n  line-height: inherit;\n}\n\ninput[type=radio]:disabled,\ninput[type=checkbox]:disabled {\n  cursor: not-allowed;\n}\n\ninput[type=date],\ninput[type=time],\ninput[type=datetime-local],\ninput[type=month] {\n  -webkit-appearance: listbox;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n}\n\ninput[type=search] {\n  -webkit-appearance: none;\n}\n\noutput {\n  display: inline-block;\n}\n\n[hidden] {\n  display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  margin-bottom: 0.5rem;\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\n\nh1, .h1 {\n  font-size: 2.5rem;\n}\n\nh2, .h2 {\n  font-size: 2rem;\n}\n\nh3, .h3 {\n  font-size: 1.75rem;\n}\n\nh4, .h4 {\n  font-size: 1.5rem;\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: 6rem;\n  font-weight: 300;\n}\n\n.display-2 {\n  font-size: 5.5rem;\n  font-weight: 300;\n}\n\n.display-3 {\n  font-size: 4.5rem;\n  font-weight: 300;\n}\n\n.display-4 {\n  font-size: 3.5rem;\n  font-weight: 300;\n}\n\nhr {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  border: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n  font-size: 80%;\n  font-weight: normal;\n}\n\nmark,\n.mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n  margin-right: 5px;\n}\n\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  padding: 0.5rem 1rem;\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n  border-left: 0.25rem solid #eceeef;\n}\n\n.blockquote-footer {\n  display: block;\n  font-size: 80%;\n  color: #818a91;\n}\n.blockquote-footer::before {\n  content: \"— \";\n}\n\n.blockquote-reverse {\n  padding-right: 1rem;\n  padding-left: 0;\n  text-align: right;\n  border-right: 0.25rem solid #eceeef;\n  border-left: 0;\n}\n\n.blockquote-reverse .blockquote-footer::before {\n  content: \"\";\n}\n.blockquote-reverse .blockquote-footer::after {\n  content: \" —\";\n}\n\ndl.row > dd + dt {\n  clear: left;\n}\n\n.img-fluid, .carousel-inner > .carousel-item > img,\n.carousel-inner > .carousel-item > a > img {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 0.25rem;\n  transition: all 0.2s ease-in-out;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 90%;\n  color: #818a91;\n}\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\ncode {\n  padding: 0.2rem 0.4rem;\n  font-size: 90%;\n  color: #bd4147;\n  background-color: #f7f7f9;\n  border-radius: 0.25rem;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 0.2rem;\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  font-size: 90%;\n  color: #373a3c;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  background-color: transparent;\n  border-radius: 0;\n}\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n\n.container {\n  margin-left: auto;\n  margin-right: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n.container::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n@media (min-width: 576px) {\n  .container {\n    width: 540px;\n    max-width: 100%;\n  }\n}\n@media (min-width: 768px) {\n  .container {\n    width: 720px;\n    max-width: 100%;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 960px;\n    max-width: 100%;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1140px;\n    max-width: 100%;\n  }\n}\n\n.container-fluid {\n  margin-left: auto;\n  margin-right: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n.container-fluid::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.row::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n@media (min-width: 576px) {\n  .row {\n    margin-right: -15px;\n    margin-left: -15px;\n  }\n}\n@media (min-width: 768px) {\n  .row {\n    margin-right: -15px;\n    margin-left: -15px;\n  }\n}\n@media (min-width: 992px) {\n  .row {\n    margin-right: -15px;\n    margin-left: -15px;\n  }\n}\n@media (min-width: 1200px) {\n  .row {\n    margin-right: -15px;\n    margin-left: -15px;\n  }\n}\n\n.col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-xl, .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-lg, .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-md, .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col-sm, .col-xs-12, .col-xs-11, .col-xs-10, .col-xs-9, .col-xs-8, .col-xs-7, .col-xs-6, .col-xs-5, .col-xs-4, .col-xs-3, .col-xs-2, .col-xs-1, .col-xs {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n@media (min-width: 576px) {\n  .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-xl, .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-lg, .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-md, .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col-sm, .col-xs-12, .col-xs-11, .col-xs-10, .col-xs-9, .col-xs-8, .col-xs-7, .col-xs-6, .col-xs-5, .col-xs-4, .col-xs-3, .col-xs-2, .col-xs-1, .col-xs {\n    padding-right: 15px;\n    padding-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-xl, .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-lg, .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-md, .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col-sm, .col-xs-12, .col-xs-11, .col-xs-10, .col-xs-9, .col-xs-8, .col-xs-7, .col-xs-6, .col-xs-5, .col-xs-4, .col-xs-3, .col-xs-2, .col-xs-1, .col-xs {\n    padding-right: 15px;\n    padding-left: 15px;\n  }\n}\n@media (min-width: 992px) {\n  .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-xl, .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-lg, .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-md, .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col-sm, .col-xs-12, .col-xs-11, .col-xs-10, .col-xs-9, .col-xs-8, .col-xs-7, .col-xs-6, .col-xs-5, .col-xs-4, .col-xs-3, .col-xs-2, .col-xs-1, .col-xs {\n    padding-right: 15px;\n    padding-left: 15px;\n  }\n}\n@media (min-width: 1200px) {\n  .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-xl, .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-lg, .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-md, .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col-sm, .col-xs-12, .col-xs-11, .col-xs-10, .col-xs-9, .col-xs-8, .col-xs-7, .col-xs-6, .col-xs-5, .col-xs-4, .col-xs-3, .col-xs-2, .col-xs-1, .col-xs {\n    padding-right: 15px;\n    padding-left: 15px;\n  }\n}\n\n.col-xs-1 {\n  float: left;\n  width: 8.3333333333%;\n}\n\n.col-xs-2 {\n  float: left;\n  width: 16.6666666667%;\n}\n\n.col-xs-3 {\n  float: left;\n  width: 25%;\n}\n\n.col-xs-4 {\n  float: left;\n  width: 33.3333333333%;\n}\n\n.col-xs-5 {\n  float: left;\n  width: 41.6666666667%;\n}\n\n.col-xs-6 {\n  float: left;\n  width: 50%;\n}\n\n.col-xs-7 {\n  float: left;\n  width: 58.3333333333%;\n}\n\n.col-xs-8 {\n  float: left;\n  width: 66.6666666667%;\n}\n\n.col-xs-9 {\n  float: left;\n  width: 75%;\n}\n\n.col-xs-10 {\n  float: left;\n  width: 83.3333333333%;\n}\n\n.col-xs-11 {\n  float: left;\n  width: 91.6666666667%;\n}\n\n.col-xs-12 {\n  float: left;\n  width: 100%;\n}\n\n.pull-xs-0 {\n  right: auto;\n}\n\n.pull-xs-1 {\n  right: 8.3333333333%;\n}\n\n.pull-xs-2 {\n  right: 16.6666666667%;\n}\n\n.pull-xs-3 {\n  right: 25%;\n}\n\n.pull-xs-4 {\n  right: 33.3333333333%;\n}\n\n.pull-xs-5 {\n  right: 41.6666666667%;\n}\n\n.pull-xs-6 {\n  right: 50%;\n}\n\n.pull-xs-7 {\n  right: 58.3333333333%;\n}\n\n.pull-xs-8 {\n  right: 66.6666666667%;\n}\n\n.pull-xs-9 {\n  right: 75%;\n}\n\n.pull-xs-10 {\n  right: 83.3333333333%;\n}\n\n.pull-xs-11 {\n  right: 91.6666666667%;\n}\n\n.pull-xs-12 {\n  right: 100%;\n}\n\n.push-xs-0 {\n  left: auto;\n}\n\n.push-xs-1 {\n  left: 8.3333333333%;\n}\n\n.push-xs-2 {\n  left: 16.6666666667%;\n}\n\n.push-xs-3 {\n  left: 25%;\n}\n\n.push-xs-4 {\n  left: 33.3333333333%;\n}\n\n.push-xs-5 {\n  left: 41.6666666667%;\n}\n\n.push-xs-6 {\n  left: 50%;\n}\n\n.push-xs-7 {\n  left: 58.3333333333%;\n}\n\n.push-xs-8 {\n  left: 66.6666666667%;\n}\n\n.push-xs-9 {\n  left: 75%;\n}\n\n.push-xs-10 {\n  left: 83.3333333333%;\n}\n\n.push-xs-11 {\n  left: 91.6666666667%;\n}\n\n.push-xs-12 {\n  left: 100%;\n}\n\n.offset-xs-1 {\n  margin-left: 8.3333333333%;\n}\n\n.offset-xs-2 {\n  margin-left: 16.6666666667%;\n}\n\n.offset-xs-3 {\n  margin-left: 25%;\n}\n\n.offset-xs-4 {\n  margin-left: 33.3333333333%;\n}\n\n.offset-xs-5 {\n  margin-left: 41.6666666667%;\n}\n\n.offset-xs-6 {\n  margin-left: 50%;\n}\n\n.offset-xs-7 {\n  margin-left: 58.3333333333%;\n}\n\n.offset-xs-8 {\n  margin-left: 66.6666666667%;\n}\n\n.offset-xs-9 {\n  margin-left: 75%;\n}\n\n.offset-xs-10 {\n  margin-left: 83.3333333333%;\n}\n\n.offset-xs-11 {\n  margin-left: 91.6666666667%;\n}\n\n@media (min-width: 576px) {\n  .col-sm-1 {\n    float: left;\n    width: 8.3333333333%;\n  }\n  .col-sm-2 {\n    float: left;\n    width: 16.6666666667%;\n  }\n  .col-sm-3 {\n    float: left;\n    width: 25%;\n  }\n  .col-sm-4 {\n    float: left;\n    width: 33.3333333333%;\n  }\n  .col-sm-5 {\n    float: left;\n    width: 41.6666666667%;\n  }\n  .col-sm-6 {\n    float: left;\n    width: 50%;\n  }\n  .col-sm-7 {\n    float: left;\n    width: 58.3333333333%;\n  }\n  .col-sm-8 {\n    float: left;\n    width: 66.6666666667%;\n  }\n  .col-sm-9 {\n    float: left;\n    width: 75%;\n  }\n  .col-sm-10 {\n    float: left;\n    width: 83.3333333333%;\n  }\n  .col-sm-11 {\n    float: left;\n    width: 91.6666666667%;\n  }\n  .col-sm-12 {\n    float: left;\n    width: 100%;\n  }\n  .pull-sm-0 {\n    right: auto;\n  }\n  .pull-sm-1 {\n    right: 8.3333333333%;\n  }\n  .pull-sm-2 {\n    right: 16.6666666667%;\n  }\n  .pull-sm-3 {\n    right: 25%;\n  }\n  .pull-sm-4 {\n    right: 33.3333333333%;\n  }\n  .pull-sm-5 {\n    right: 41.6666666667%;\n  }\n  .pull-sm-6 {\n    right: 50%;\n  }\n  .pull-sm-7 {\n    right: 58.3333333333%;\n  }\n  .pull-sm-8 {\n    right: 66.6666666667%;\n  }\n  .pull-sm-9 {\n    right: 75%;\n  }\n  .pull-sm-10 {\n    right: 83.3333333333%;\n  }\n  .pull-sm-11 {\n    right: 91.6666666667%;\n  }\n  .pull-sm-12 {\n    right: 100%;\n  }\n  .push-sm-0 {\n    left: auto;\n  }\n  .push-sm-1 {\n    left: 8.3333333333%;\n  }\n  .push-sm-2 {\n    left: 16.6666666667%;\n  }\n  .push-sm-3 {\n    left: 25%;\n  }\n  .push-sm-4 {\n    left: 33.3333333333%;\n  }\n  .push-sm-5 {\n    left: 41.6666666667%;\n  }\n  .push-sm-6 {\n    left: 50%;\n  }\n  .push-sm-7 {\n    left: 58.3333333333%;\n  }\n  .push-sm-8 {\n    left: 66.6666666667%;\n  }\n  .push-sm-9 {\n    left: 75%;\n  }\n  .push-sm-10 {\n    left: 83.3333333333%;\n  }\n  .push-sm-11 {\n    left: 91.6666666667%;\n  }\n  .push-sm-12 {\n    left: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0%;\n  }\n  .offset-sm-1 {\n    margin-left: 8.3333333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.6666666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.3333333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.6666666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.3333333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.6666666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.3333333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.6666666667%;\n  }\n}\n@media (min-width: 768px) {\n  .col-md-1 {\n    float: left;\n    width: 8.3333333333%;\n  }\n  .col-md-2 {\n    float: left;\n    width: 16.6666666667%;\n  }\n  .col-md-3 {\n    float: left;\n    width: 25%;\n  }\n  .col-md-4 {\n    float: left;\n    width: 33.3333333333%;\n  }\n  .col-md-5 {\n    float: left;\n    width: 41.6666666667%;\n  }\n  .col-md-6 {\n    float: left;\n    width: 50%;\n  }\n  .col-md-7 {\n    float: left;\n    width: 58.3333333333%;\n  }\n  .col-md-8 {\n    float: left;\n    width: 66.6666666667%;\n  }\n  .col-md-9 {\n    float: left;\n    width: 75%;\n  }\n  .col-md-10 {\n    float: left;\n    width: 83.3333333333%;\n  }\n  .col-md-11 {\n    float: left;\n    width: 91.6666666667%;\n  }\n  .col-md-12 {\n    float: left;\n    width: 100%;\n  }\n  .pull-md-0 {\n    right: auto;\n  }\n  .pull-md-1 {\n    right: 8.3333333333%;\n  }\n  .pull-md-2 {\n    right: 16.6666666667%;\n  }\n  .pull-md-3 {\n    right: 25%;\n  }\n  .pull-md-4 {\n    right: 33.3333333333%;\n  }\n  .pull-md-5 {\n    right: 41.6666666667%;\n  }\n  .pull-md-6 {\n    right: 50%;\n  }\n  .pull-md-7 {\n    right: 58.3333333333%;\n  }\n  .pull-md-8 {\n    right: 66.6666666667%;\n  }\n  .pull-md-9 {\n    right: 75%;\n  }\n  .pull-md-10 {\n    right: 83.3333333333%;\n  }\n  .pull-md-11 {\n    right: 91.6666666667%;\n  }\n  .pull-md-12 {\n    right: 100%;\n  }\n  .push-md-0 {\n    left: auto;\n  }\n  .push-md-1 {\n    left: 8.3333333333%;\n  }\n  .push-md-2 {\n    left: 16.6666666667%;\n  }\n  .push-md-3 {\n    left: 25%;\n  }\n  .push-md-4 {\n    left: 33.3333333333%;\n  }\n  .push-md-5 {\n    left: 41.6666666667%;\n  }\n  .push-md-6 {\n    left: 50%;\n  }\n  .push-md-7 {\n    left: 58.3333333333%;\n  }\n  .push-md-8 {\n    left: 66.6666666667%;\n  }\n  .push-md-9 {\n    left: 75%;\n  }\n  .push-md-10 {\n    left: 83.3333333333%;\n  }\n  .push-md-11 {\n    left: 91.6666666667%;\n  }\n  .push-md-12 {\n    left: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0%;\n  }\n  .offset-md-1 {\n    margin-left: 8.3333333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.6666666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.3333333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.6666666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.3333333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.6666666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.3333333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.6666666667%;\n  }\n}\n@media (min-width: 992px) {\n  .col-lg-1 {\n    float: left;\n    width: 8.3333333333%;\n  }\n  .col-lg-2 {\n    float: left;\n    width: 16.6666666667%;\n  }\n  .col-lg-3 {\n    float: left;\n    width: 25%;\n  }\n  .col-lg-4 {\n    float: left;\n    width: 33.3333333333%;\n  }\n  .col-lg-5 {\n    float: left;\n    width: 41.6666666667%;\n  }\n  .col-lg-6 {\n    float: left;\n    width: 50%;\n  }\n  .col-lg-7 {\n    float: left;\n    width: 58.3333333333%;\n  }\n  .col-lg-8 {\n    float: left;\n    width: 66.6666666667%;\n  }\n  .col-lg-9 {\n    float: left;\n    width: 75%;\n  }\n  .col-lg-10 {\n    float: left;\n    width: 83.3333333333%;\n  }\n  .col-lg-11 {\n    float: left;\n    width: 91.6666666667%;\n  }\n  .col-lg-12 {\n    float: left;\n    width: 100%;\n  }\n  .pull-lg-0 {\n    right: auto;\n  }\n  .pull-lg-1 {\n    right: 8.3333333333%;\n  }\n  .pull-lg-2 {\n    right: 16.6666666667%;\n  }\n  .pull-lg-3 {\n    right: 25%;\n  }\n  .pull-lg-4 {\n    right: 33.3333333333%;\n  }\n  .pull-lg-5 {\n    right: 41.6666666667%;\n  }\n  .pull-lg-6 {\n    right: 50%;\n  }\n  .pull-lg-7 {\n    right: 58.3333333333%;\n  }\n  .pull-lg-8 {\n    right: 66.6666666667%;\n  }\n  .pull-lg-9 {\n    right: 75%;\n  }\n  .pull-lg-10 {\n    right: 83.3333333333%;\n  }\n  .pull-lg-11 {\n    right: 91.6666666667%;\n  }\n  .pull-lg-12 {\n    right: 100%;\n  }\n  .push-lg-0 {\n    left: auto;\n  }\n  .push-lg-1 {\n    left: 8.3333333333%;\n  }\n  .push-lg-2 {\n    left: 16.6666666667%;\n  }\n  .push-lg-3 {\n    left: 25%;\n  }\n  .push-lg-4 {\n    left: 33.3333333333%;\n  }\n  .push-lg-5 {\n    left: 41.6666666667%;\n  }\n  .push-lg-6 {\n    left: 50%;\n  }\n  .push-lg-7 {\n    left: 58.3333333333%;\n  }\n  .push-lg-8 {\n    left: 66.6666666667%;\n  }\n  .push-lg-9 {\n    left: 75%;\n  }\n  .push-lg-10 {\n    left: 83.3333333333%;\n  }\n  .push-lg-11 {\n    left: 91.6666666667%;\n  }\n  .push-lg-12 {\n    left: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0%;\n  }\n  .offset-lg-1 {\n    margin-left: 8.3333333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.6666666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.3333333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.6666666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.3333333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.6666666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.3333333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.6666666667%;\n  }\n}\n@media (min-width: 1200px) {\n  .col-xl-1 {\n    float: left;\n    width: 8.3333333333%;\n  }\n  .col-xl-2 {\n    float: left;\n    width: 16.6666666667%;\n  }\n  .col-xl-3 {\n    float: left;\n    width: 25%;\n  }\n  .col-xl-4 {\n    float: left;\n    width: 33.3333333333%;\n  }\n  .col-xl-5 {\n    float: left;\n    width: 41.6666666667%;\n  }\n  .col-xl-6 {\n    float: left;\n    width: 50%;\n  }\n  .col-xl-7 {\n    float: left;\n    width: 58.3333333333%;\n  }\n  .col-xl-8 {\n    float: left;\n    width: 66.6666666667%;\n  }\n  .col-xl-9 {\n    float: left;\n    width: 75%;\n  }\n  .col-xl-10 {\n    float: left;\n    width: 83.3333333333%;\n  }\n  .col-xl-11 {\n    float: left;\n    width: 91.6666666667%;\n  }\n  .col-xl-12 {\n    float: left;\n    width: 100%;\n  }\n  .pull-xl-0 {\n    right: auto;\n  }\n  .pull-xl-1 {\n    right: 8.3333333333%;\n  }\n  .pull-xl-2 {\n    right: 16.6666666667%;\n  }\n  .pull-xl-3 {\n    right: 25%;\n  }\n  .pull-xl-4 {\n    right: 33.3333333333%;\n  }\n  .pull-xl-5 {\n    right: 41.6666666667%;\n  }\n  .pull-xl-6 {\n    right: 50%;\n  }\n  .pull-xl-7 {\n    right: 58.3333333333%;\n  }\n  .pull-xl-8 {\n    right: 66.6666666667%;\n  }\n  .pull-xl-9 {\n    right: 75%;\n  }\n  .pull-xl-10 {\n    right: 83.3333333333%;\n  }\n  .pull-xl-11 {\n    right: 91.6666666667%;\n  }\n  .pull-xl-12 {\n    right: 100%;\n  }\n  .push-xl-0 {\n    left: auto;\n  }\n  .push-xl-1 {\n    left: 8.3333333333%;\n  }\n  .push-xl-2 {\n    left: 16.6666666667%;\n  }\n  .push-xl-3 {\n    left: 25%;\n  }\n  .push-xl-4 {\n    left: 33.3333333333%;\n  }\n  .push-xl-5 {\n    left: 41.6666666667%;\n  }\n  .push-xl-6 {\n    left: 50%;\n  }\n  .push-xl-7 {\n    left: 58.3333333333%;\n  }\n  .push-xl-8 {\n    left: 66.6666666667%;\n  }\n  .push-xl-9 {\n    left: 75%;\n  }\n  .push-xl-10 {\n    left: 83.3333333333%;\n  }\n  .push-xl-11 {\n    left: 91.6666666667%;\n  }\n  .push-xl-12 {\n    left: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0%;\n  }\n  .offset-xl-1 {\n    margin-left: 8.3333333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.6666666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.3333333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.6666666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.3333333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.6666666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.3333333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.6666666667%;\n  }\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 1rem;\n}\n.table th,\n.table td {\n  padding: 0.75rem;\n  vertical-align: top;\n  border-top: 1px solid #eceeef;\n}\n.table thead th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #eceeef;\n}\n.table tbody + tbody {\n  border-top: 2px solid #eceeef;\n}\n.table .table {\n  background-color: #fff;\n}\n\n.table-sm th,\n.table-sm td {\n  padding: 0.3rem;\n}\n\n.table-bordered {\n  border: 1px solid #eceeef;\n}\n.table-bordered th,\n.table-bordered td {\n  border: 1px solid #eceeef;\n}\n.table-bordered thead th,\n.table-bordered thead td {\n  border-bottom-width: 2px;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n  background-color: #dff0d8;\n}\n\n.table-hover .table-success:hover {\n  background-color: rgb(207.8888888889, 232.9166666667, 197.5833333333);\n}\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n  background-color: rgb(207.8888888889, 232.9166666667, 197.5833333333);\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n  background-color: #d9edf7;\n}\n\n.table-hover .table-info:hover {\n  background-color: rgb(195.9347826087, 227.0217391304, 242.5652173913);\n}\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n  background-color: rgb(195.9347826087, 227.0217391304, 242.5652173913);\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n  background-color: #fcf8e3;\n}\n\n.table-hover .table-warning:hover {\n  background-color: rgb(249.5322580645, 242.2419354839, 203.9677419355);\n}\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n  background-color: rgb(249.5322580645, 242.2419354839, 203.9677419355);\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n  background-color: #f2dede;\n}\n\n.table-hover .table-danger:hover {\n  background-color: rgb(234.7934782609, 203.7065217391, 203.7065217391);\n}\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n  background-color: rgb(234.7934782609, 203.7065217391, 203.7065217391);\n}\n\n.thead-inverse th {\n  color: #fff;\n  background-color: #373a3c;\n}\n\n.thead-default th {\n  color: #55595c;\n  background-color: #eceeef;\n}\n\n.table-inverse {\n  color: #eceeef;\n  background-color: #373a3c;\n}\n.table-inverse th,\n.table-inverse td,\n.table-inverse thead th {\n  border-color: #55595c;\n}\n.table-inverse.table-bordered {\n  border: 0;\n}\n\n.table-responsive {\n  display: block;\n  width: 100%;\n  min-height: 0%;\n  overflow-x: auto;\n}\n\n.table-reflow thead {\n  float: left;\n}\n.table-reflow tbody {\n  display: block;\n  white-space: nowrap;\n}\n.table-reflow th,\n.table-reflow td {\n  border-top: 1px solid #eceeef;\n  border-left: 1px solid #eceeef;\n}\n.table-reflow th:last-child,\n.table-reflow td:last-child {\n  border-right: 1px solid #eceeef;\n}\n.table-reflow thead:last-child tr:last-child th,\n.table-reflow thead:last-child tr:last-child td,\n.table-reflow tbody:last-child tr:last-child th,\n.table-reflow tbody:last-child tr:last-child td,\n.table-reflow tfoot:last-child tr:last-child th,\n.table-reflow tfoot:last-child tr:last-child td {\n  border-bottom: 1px solid #eceeef;\n}\n.table-reflow tr {\n  float: left;\n}\n.table-reflow tr th,\n.table-reflow tr td {\n  display: block !important;\n  border: 1px solid #eceeef;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.5rem 0.75rem;\n  font-size: 1rem;\n  line-height: 1.25;\n  color: #55595c;\n  background-color: #fff;\n  background-image: none;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control:focus {\n  color: #55595c;\n  background-color: #fff;\n  border-color: #66afe9;\n  outline: none;\n}\n.form-control::placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:disabled, .form-control[readonly] {\n  background-color: #eceeef;\n  opacity: 1;\n}\n.form-control:disabled {\n  cursor: not-allowed;\n}\n\nselect.form-control:not([size]):not([multiple]) {\n  height: calc(2.5rem - 2px);\n}\nselect.form-control:focus::-ms-value {\n  color: #55595c;\n  background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n  display: block;\n}\n\n.col-form-label {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  margin-bottom: 0;\n}\n\n.col-form-label-lg {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  font-size: 0.875rem;\n}\n\n.col-form-legend {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n}\n\n.form-control-static {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  line-height: 1.25;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n.form-control-static.form-control-sm, .input-group-sm > .form-control-static.form-control,\n.input-group-sm > .form-control-static.input-group-addon,\n.input-group-sm > .input-group-btn > .form-control-static.btn, .form-control-static.form-control-lg, .input-group-lg > .form-control-static.form-control,\n.input-group-lg > .form-control-static.input-group-addon,\n.input-group-lg > .input-group-btn > .form-control-static.btn {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm, .input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\nselect.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]),\n.input-group-sm > select.input-group-addon:not([size]):not([multiple]),\n.input-group-sm > .input-group-btn > select.btn:not([size]):not([multiple]) {\n  height: 1.8125rem;\n}\n\n.form-control-lg, .input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\nselect.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]),\n.input-group-lg > select.input-group-addon:not([size]):not([multiple]),\n.input-group-lg > .input-group-btn > select.btn:not([size]):not([multiple]) {\n  height: 3.1666666667rem;\n}\n\n.form-group {\n  margin-bottom: 1rem;\n}\n\n.form-text {\n  display: block;\n  margin-top: 0.25rem;\n}\n\n.form-check {\n  position: relative;\n  display: block;\n  margin-bottom: 0.75rem;\n}\n.form-check + .form-check {\n  margin-top: -0.25rem;\n}\n.form-check.disabled .form-check-label {\n  color: #818a91;\n  cursor: not-allowed;\n}\n\n.form-check-label {\n  padding-left: 1.25rem;\n  margin-bottom: 0;\n  cursor: pointer;\n}\n\n.form-check-input {\n  position: absolute;\n  margin-top: 0.25rem;\n  margin-left: -1.25rem;\n}\n.form-check-input:only-child {\n  position: static;\n}\n\n.form-check-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 1.25rem;\n  margin-bottom: 0;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.form-check-inline + .form-check-inline {\n  margin-left: 0.75rem;\n}\n.form-check-inline.disabled {\n  color: #818a91;\n  cursor: not-allowed;\n}\n\n.form-control-feedback {\n  margin-top: 0.25rem;\n}\n\n.form-control-success,\n.form-control-warning,\n.form-control-danger {\n  padding-right: 2.25rem;\n  background-repeat: no-repeat;\n  background-position: center right 0.625rem;\n  background-size: 1.25rem 1.25rem;\n}\n\n.has-success .form-control-feedback,\n.has-success .form-control-label,\n.has-success .form-check-label,\n.has-success .form-check-inline,\n.has-success .custom-control {\n  color: #089944;\n}\n.has-success .form-control {\n  border-color: #089944;\n}\n.has-success .form-control:focus {\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px rgb(20.2732919255, 242.7267080745, 112.3229813665);\n}\n.has-success .input-group-addon {\n  color: #089944;\n  border-color: #089944;\n  background-color: rgb(117.2049689441, 247.7950310559, 171.2422360248);\n}\n.has-success .form-control-success {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#089944' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E\");\n}\n\n.has-warning .form-control-feedback,\n.has-warning .form-control-label,\n.has-warning .form-check-label,\n.has-warning .form-check-inline,\n.has-warning .custom-control {\n  color: #eca649;\n}\n.has-warning .form-control {\n  border-color: #eca649;\n}\n.has-warning .form-control:focus {\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px rgb(245.6417910448, 211.1641791045, 165.3582089552);\n}\n.has-warning .input-group-addon {\n  color: #eca649;\n  border-color: #eca649;\n  background-color: white;\n}\n.has-warning .form-control-warning {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#eca649' d='M4.4 5.324h-.8v-2.46h.8zm0 1.42h-.8V5.89h.8zM3.76.63L.04 7.075c-.115.2.016.425.26.426h7.397c.242 0 .372-.226.258-.426C6.726 4.924 5.47 2.79 4.253.63c-.113-.174-.39-.174-.494 0z'/%3E%3C/svg%3E\");\n}\n\n.has-danger .form-control-feedback,\n.has-danger .form-control-label,\n.has-danger .form-check-label,\n.has-danger .form-check-inline,\n.has-danger .custom-control {\n  color: #990822;\n}\n.has-danger .form-control {\n  border-color: #990822;\n}\n.has-danger .form-control:focus {\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px rgb(242.7267080745, 20.2732919255, 60.1614906832);\n}\n.has-danger .input-group-addon {\n  color: #990822;\n  border-color: #990822;\n  background-color: rgb(247.7950310559, 117.2049689441, 140.6211180124);\n}\n.has-danger .form-control-danger {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#990822' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E\");\n}\n\n@media (min-width: 576px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .form-control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-check {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-check-label {\n    padding-left: 0;\n  }\n  .form-inline .form-check-input {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n\n.btn {\n  display: inline-block;\n  font-weight: normal;\n  line-height: 1.25;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  cursor: pointer;\n  user-select: none;\n  border: 1px solid transparent;\n  padding: 0.5rem 1rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n}\n.btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:focus, .btn:hover {\n  text-decoration: none;\n}\n.btn.focus {\n  text-decoration: none;\n}\n.btn:active, .btn.active {\n  background-image: none;\n  outline: 0;\n}\n.btn.disabled, .btn:disabled {\n  cursor: not-allowed;\n  opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #366e98;\n  border-color: #366e98;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: rgb(40.6310679612, 82.7669902913, 114.3689320388);\n  border-color: rgb(37.9572815534, 77.3203883495, 106.8427184466);\n}\n.btn-primary:focus, .btn-primary.focus {\n  color: #fff;\n  background-color: rgb(40.6310679612, 82.7669902913, 114.3689320388);\n  border-color: rgb(37.9572815534, 77.3203883495, 106.8427184466);\n}\n.btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: rgb(40.6310679612, 82.7669902913, 114.3689320388);\n  border-color: rgb(37.9572815534, 77.3203883495, 106.8427184466);\n  background-image: none;\n}\n.btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus, .open > .btn-primary.dropdown-toggle:hover, .open > .btn-primary.dropdown-toggle:focus, .open > .btn-primary.dropdown-toggle.focus {\n  color: #fff;\n  background-color: rgb(31.272815534, 63.7038834951, 88.027184466);\n  border-color: rgb(20.5776699029, 41.9174757282, 57.9223300971);\n}\n.btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary:disabled:focus, .btn-primary:disabled.focus {\n  background-color: #366e98;\n  border-color: #366e98;\n}\n.btn-primary.disabled:hover, .btn-primary:disabled:hover {\n  background-color: #366e98;\n  border-color: #366e98;\n}\n\n.btn-secondary {\n  color: #373a3c;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-secondary:hover {\n  color: #373a3c;\n  background-color: rgb(229.5, 229.5, 229.5);\n  border-color: rgb(173.4, 173.4, 173.4);\n}\n.btn-secondary:focus, .btn-secondary.focus {\n  color: #373a3c;\n  background-color: rgb(229.5, 229.5, 229.5);\n  border-color: rgb(173.4, 173.4, 173.4);\n}\n.btn-secondary:active, .btn-secondary.active, .open > .btn-secondary.dropdown-toggle {\n  color: #373a3c;\n  background-color: rgb(229.5, 229.5, 229.5);\n  border-color: rgb(173.4, 173.4, 173.4);\n  background-image: none;\n}\n.btn-secondary:active:hover, .btn-secondary:active:focus, .btn-secondary:active.focus, .btn-secondary.active:hover, .btn-secondary.active:focus, .btn-secondary.active.focus, .open > .btn-secondary.dropdown-toggle:hover, .open > .btn-secondary.dropdown-toggle:focus, .open > .btn-secondary.dropdown-toggle.focus {\n  color: #373a3c;\n  background-color: rgb(211.65, 211.65, 211.65);\n  border-color: rgb(140.25, 140.25, 140.25);\n}\n.btn-secondary.disabled:focus, .btn-secondary.disabled.focus, .btn-secondary:disabled:focus, .btn-secondary:disabled.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-secondary.disabled:hover, .btn-secondary:disabled:hover {\n  background-color: #fff;\n  border-color: #ccc;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #044b7f;\n  border-color: #044b7f;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: rgb(2.4427480916, 45.8015267176, 77.5572519084);\n  border-color: rgb(2.1312977099, 39.9618320611, 67.6687022901);\n}\n.btn-info:focus, .btn-info.focus {\n  color: #fff;\n  background-color: rgb(2.4427480916, 45.8015267176, 77.5572519084);\n  border-color: rgb(2.1312977099, 39.9618320611, 67.6687022901);\n}\n.btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: rgb(2.4427480916, 45.8015267176, 77.5572519084);\n  border-color: rgb(2.1312977099, 39.9618320611, 67.6687022901);\n  background-image: none;\n}\n.btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus, .open > .btn-info.dropdown-toggle:hover, .open > .btn-info.dropdown-toggle:focus, .open > .btn-info.dropdown-toggle.focus {\n  color: #fff;\n  background-color: rgb(1.3526717557, 25.3625954198, 42.9473282443);\n  border-color: rgb(0.106870229, 2.0038167939, 3.393129771);\n}\n.btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info:disabled:focus, .btn-info:disabled.focus {\n  background-color: #044b7f;\n  border-color: #044b7f;\n}\n.btn-info.disabled:hover, .btn-info:disabled:hover {\n  background-color: #044b7f;\n  border-color: #044b7f;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #089944;\n  border-color: #089944;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: rgb(5.4658385093, 104.5341614907, 46.4596273292);\n  border-color: rgb(4.9590062112, 94.8409937888, 42.151552795);\n}\n.btn-success:focus, .btn-success.focus {\n  color: #fff;\n  background-color: rgb(5.4658385093, 104.5341614907, 46.4596273292);\n  border-color: rgb(4.9590062112, 94.8409937888, 42.151552795);\n}\n.btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: rgb(5.4658385093, 104.5341614907, 46.4596273292);\n  border-color: rgb(4.9590062112, 94.8409937888, 42.151552795);\n  background-image: none;\n}\n.btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus, .open > .btn-success.dropdown-toggle:hover, .open > .btn-success.dropdown-toggle:focus, .open > .btn-success.dropdown-toggle.focus {\n  color: #fff;\n  background-color: rgb(3.6919254658, 70.6080745342, 31.3813664596);\n  border-color: rgb(1.6645962733, 31.8354037267, 14.149068323);\n}\n.btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success:disabled:focus, .btn-success:disabled.focus {\n  background-color: #089944;\n  border-color: #089944;\n}\n.btn-success.disabled:hover, .btn-success:disabled:hover {\n  background-color: #089944;\n  border-color: #089944;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #eca649;\n  border-color: #eca649;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: rgb(231.1791044776, 143.4179104478, 26.8208955224);\n  border-color: rgb(224.376119403, 138.0776119403, 23.423880597);\n}\n.btn-warning:focus, .btn-warning.focus {\n  color: #fff;\n  background-color: rgb(231.1791044776, 143.4179104478, 26.8208955224);\n  border-color: rgb(224.376119403, 138.0776119403, 23.423880597);\n}\n.btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: rgb(231.1791044776, 143.4179104478, 26.8208955224);\n  border-color: rgb(224.376119403, 138.0776119403, 23.423880597);\n  background-image: none;\n}\n.btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus, .open > .btn-warning.dropdown-toggle:hover, .open > .btn-warning.dropdown-toggle:focus, .open > .btn-warning.dropdown-toggle.focus {\n  color: #fff;\n  background-color: rgb(201.2865671642, 123.8686567164, 21.0134328358);\n  border-color: rgb(164.3432835821, 101.1343283582, 17.1567164179);\n}\n.btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning:disabled:focus, .btn-warning:disabled.focus {\n  background-color: #eca649;\n  border-color: #eca649;\n}\n.btn-warning.disabled:hover, .btn-warning:disabled:hover {\n  background-color: #eca649;\n  border-color: #eca649;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #990822;\n  border-color: #990822;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: rgb(104.5341614907, 5.4658385093, 23.2298136646);\n  border-color: rgb(94.8409937888, 4.9590062112, 21.0757763975);\n}\n.btn-danger:focus, .btn-danger.focus {\n  color: #fff;\n  background-color: rgb(104.5341614907, 5.4658385093, 23.2298136646);\n  border-color: rgb(94.8409937888, 4.9590062112, 21.0757763975);\n}\n.btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: rgb(104.5341614907, 5.4658385093, 23.2298136646);\n  border-color: rgb(94.8409937888, 4.9590062112, 21.0757763975);\n  background-image: none;\n}\n.btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus, .open > .btn-danger.dropdown-toggle:hover, .open > .btn-danger.dropdown-toggle:focus, .open > .btn-danger.dropdown-toggle.focus {\n  color: #fff;\n  background-color: rgb(70.6080745342, 3.6919254658, 15.6906832298);\n  border-color: rgb(31.8354037267, 1.6645962733, 7.0745341615);\n}\n.btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger:disabled:focus, .btn-danger:disabled.focus {\n  background-color: #990822;\n  border-color: #990822;\n}\n.btn-danger.disabled:hover, .btn-danger:disabled:hover {\n  background-color: #990822;\n  border-color: #990822;\n}\n\n.btn-outline-primary {\n  color: #366e98;\n  background-image: none;\n  background-color: transparent;\n  border-color: #366e98;\n}\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #366e98;\n  border-color: #366e98;\n}\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n  color: #fff;\n  background-color: #366e98;\n  border-color: #366e98;\n}\n.btn-outline-primary:active, .btn-outline-primary.active, .open > .btn-outline-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #366e98;\n  border-color: #366e98;\n}\n.btn-outline-primary:active:hover, .btn-outline-primary:active:focus, .btn-outline-primary:active.focus, .btn-outline-primary.active:hover, .btn-outline-primary.active:focus, .btn-outline-primary.active.focus, .open > .btn-outline-primary.dropdown-toggle:hover, .open > .btn-outline-primary.dropdown-toggle:focus, .open > .btn-outline-primary.dropdown-toggle.focus {\n  color: #fff;\n  background-color: rgb(31.272815534, 63.7038834951, 88.027184466);\n  border-color: rgb(20.5776699029, 41.9174757282, 57.9223300971);\n}\n.btn-outline-primary.disabled:focus, .btn-outline-primary.disabled.focus, .btn-outline-primary:disabled:focus, .btn-outline-primary:disabled.focus {\n  border-color: rgb(105.9514563107, 160.8640776699, 202.0485436893);\n}\n.btn-outline-primary.disabled:hover, .btn-outline-primary:disabled:hover {\n  border-color: rgb(105.9514563107, 160.8640776699, 202.0485436893);\n}\n\n.btn-outline-secondary {\n  color: #ccc;\n  background-image: none;\n  background-color: transparent;\n  border-color: #ccc;\n}\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #ccc;\n  border-color: #ccc;\n}\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n  color: #fff;\n  background-color: #ccc;\n  border-color: #ccc;\n}\n.btn-outline-secondary:active, .btn-outline-secondary.active, .open > .btn-outline-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #ccc;\n  border-color: #ccc;\n}\n.btn-outline-secondary:active:hover, .btn-outline-secondary:active:focus, .btn-outline-secondary:active.focus, .btn-outline-secondary.active:hover, .btn-outline-secondary.active:focus, .btn-outline-secondary.active.focus, .open > .btn-outline-secondary.dropdown-toggle:hover, .open > .btn-outline-secondary.dropdown-toggle:focus, .open > .btn-outline-secondary.dropdown-toggle.focus {\n  color: #fff;\n  background-color: rgb(160.65, 160.65, 160.65);\n  border-color: rgb(140.25, 140.25, 140.25);\n}\n.btn-outline-secondary.disabled:focus, .btn-outline-secondary.disabled.focus, .btn-outline-secondary:disabled:focus, .btn-outline-secondary:disabled.focus {\n  border-color: white;\n}\n.btn-outline-secondary.disabled:hover, .btn-outline-secondary:disabled:hover {\n  border-color: white;\n}\n\n.btn-outline-info {\n  color: #044b7f;\n  background-image: none;\n  background-color: transparent;\n  border-color: #044b7f;\n}\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #044b7f;\n  border-color: #044b7f;\n}\n.btn-outline-info:focus, .btn-outline-info.focus {\n  color: #fff;\n  background-color: #044b7f;\n  border-color: #044b7f;\n}\n.btn-outline-info:active, .btn-outline-info.active, .open > .btn-outline-info.dropdown-toggle {\n  color: #fff;\n  background-color: #044b7f;\n  border-color: #044b7f;\n}\n.btn-outline-info:active:hover, .btn-outline-info:active:focus, .btn-outline-info:active.focus, .btn-outline-info.active:hover, .btn-outline-info.active:focus, .btn-outline-info.active.focus, .open > .btn-outline-info.dropdown-toggle:hover, .open > .btn-outline-info.dropdown-toggle:focus, .open > .btn-outline-info.dropdown-toggle.focus {\n  color: #fff;\n  background-color: rgb(1.3526717557, 25.3625954198, 42.9473282443);\n  border-color: rgb(0.106870229, 2.0038167939, 3.393129771);\n}\n.btn-outline-info.disabled:focus, .btn-outline-info.disabled.focus, .btn-outline-info:disabled:focus, .btn-outline-info:disabled.focus {\n  border-color: rgb(7.1145038168, 133.3969465649, 225.8854961832);\n}\n.btn-outline-info.disabled:hover, .btn-outline-info:disabled:hover {\n  border-color: rgb(7.1145038168, 133.3969465649, 225.8854961832);\n}\n\n.btn-outline-success {\n  color: #089944;\n  background-image: none;\n  background-color: transparent;\n  border-color: #089944;\n}\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #089944;\n  border-color: #089944;\n}\n.btn-outline-success:focus, .btn-outline-success.focus {\n  color: #fff;\n  background-color: #089944;\n  border-color: #089944;\n}\n.btn-outline-success:active, .btn-outline-success.active, .open > .btn-outline-success.dropdown-toggle {\n  color: #fff;\n  background-color: #089944;\n  border-color: #089944;\n}\n.btn-outline-success:active:hover, .btn-outline-success:active:focus, .btn-outline-success:active.focus, .btn-outline-success.active:hover, .btn-outline-success.active:focus, .btn-outline-success.active.focus, .open > .btn-outline-success.dropdown-toggle:hover, .open > .btn-outline-success.dropdown-toggle:focus, .open > .btn-outline-success.dropdown-toggle.focus {\n  color: #fff;\n  background-color: rgb(3.6919254658, 70.6080745342, 31.3813664596);\n  border-color: rgb(1.6645962733, 31.8354037267, 14.149068323);\n}\n.btn-outline-success.disabled:focus, .btn-outline-success.disabled.focus, .btn-outline-success:disabled:focus, .btn-outline-success:disabled.focus {\n  border-color: rgb(20.2732919255, 242.7267080745, 112.3229813665);\n}\n.btn-outline-success.disabled:hover, .btn-outline-success:disabled:hover {\n  border-color: rgb(20.2732919255, 242.7267080745, 112.3229813665);\n}\n\n.btn-outline-warning {\n  color: #eca649;\n  background-image: none;\n  background-color: transparent;\n  border-color: #eca649;\n}\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #eca649;\n  border-color: #eca649;\n}\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n  color: #fff;\n  background-color: #eca649;\n  border-color: #eca649;\n}\n.btn-outline-warning:active, .btn-outline-warning.active, .open > .btn-outline-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #eca649;\n  border-color: #eca649;\n}\n.btn-outline-warning:active:hover, .btn-outline-warning:active:focus, .btn-outline-warning:active.focus, .btn-outline-warning.active:hover, .btn-outline-warning.active:focus, .btn-outline-warning.active.focus, .open > .btn-outline-warning.dropdown-toggle:hover, .open > .btn-outline-warning.dropdown-toggle:focus, .open > .btn-outline-warning.dropdown-toggle.focus {\n  color: #fff;\n  background-color: rgb(201.2865671642, 123.8686567164, 21.0134328358);\n  border-color: rgb(164.3432835821, 101.1343283582, 17.1567164179);\n}\n.btn-outline-warning.disabled:focus, .btn-outline-warning.disabled.focus, .btn-outline-warning:disabled:focus, .btn-outline-warning:disabled.focus {\n  border-color: rgb(245.6417910448, 211.1641791045, 165.3582089552);\n}\n.btn-outline-warning.disabled:hover, .btn-outline-warning:disabled:hover {\n  border-color: rgb(245.6417910448, 211.1641791045, 165.3582089552);\n}\n\n.btn-outline-danger {\n  color: #990822;\n  background-image: none;\n  background-color: transparent;\n  border-color: #990822;\n}\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #990822;\n  border-color: #990822;\n}\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n  color: #fff;\n  background-color: #990822;\n  border-color: #990822;\n}\n.btn-outline-danger:active, .btn-outline-danger.active, .open > .btn-outline-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #990822;\n  border-color: #990822;\n}\n.btn-outline-danger:active:hover, .btn-outline-danger:active:focus, .btn-outline-danger:active.focus, .btn-outline-danger.active:hover, .btn-outline-danger.active:focus, .btn-outline-danger.active.focus, .open > .btn-outline-danger.dropdown-toggle:hover, .open > .btn-outline-danger.dropdown-toggle:focus, .open > .btn-outline-danger.dropdown-toggle.focus {\n  color: #fff;\n  background-color: rgb(70.6080745342, 3.6919254658, 15.6906832298);\n  border-color: rgb(31.8354037267, 1.6645962733, 7.0745341615);\n}\n.btn-outline-danger.disabled:focus, .btn-outline-danger.disabled.focus, .btn-outline-danger:disabled:focus, .btn-outline-danger:disabled.focus {\n  border-color: rgb(242.7267080745, 20.2732919255, 60.1614906832);\n}\n.btn-outline-danger.disabled:hover, .btn-outline-danger:disabled:hover {\n  border-color: rgb(242.7267080745, 20.2732919255, 60.1614906832);\n}\n\n.btn-link {\n  font-weight: normal;\n  color: #366e98;\n  border-radius: 0;\n}\n.btn-link, .btn-link:active, .btn-link.active, .btn-link:disabled {\n  background-color: transparent;\n}\n.btn-link, .btn-link:focus, .btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover {\n  border-color: transparent;\n}\n.btn-link:focus, .btn-link:hover {\n  color: rgb(33.9466019417, 69.1504854369, 95.5533980583);\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link:disabled:focus, .btn-link:disabled:hover {\n  color: #818a91;\n  text-decoration: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n.btn-block + .btn-block {\n  margin-top: 0.5rem;\n}\n\ninput[type=submit].btn-block,\ninput[type=reset].btn-block,\ninput[type=button].btn-block {\n  width: 100%;\n}\n\n.fade {\n  opacity: 0;\n  transition: opacity 0.15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\n\ntr.collapse.in {\n  display: table-row;\n}\n\ntbody.collapse.in {\n  display: table-row-group;\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  transition-timing-function: ease;\n  transition-duration: 0.35s;\n  transition-property: height;\n}\n\n.dropup,\n.dropdown {\n  position: relative;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 0.3em;\n  vertical-align: middle;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n.dropup .dropdown-toggle::after {\n  border-top: 0;\n  border-bottom: 0.3em solid;\n}\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0.125rem 0 0;\n  font-size: 1rem;\n  color: #373a3c;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-divider {\n  height: 1px;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 3px 1.5rem;\n  clear: both;\n  font-weight: normal;\n  color: #373a3c;\n  text-align: inherit;\n  white-space: nowrap;\n  background: none;\n  border: 0;\n}\n.dropdown-item:focus, .dropdown-item:hover {\n  color: rgb(42.8043478261, 45.1391304348, 46.6956521739);\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-item.active, .dropdown-item.active:focus, .dropdown-item.active:hover {\n  color: #fff;\n  text-decoration: none;\n  background-color: #366e98;\n  outline: 0;\n}\n.dropdown-item.disabled, .dropdown-item.disabled:focus, .dropdown-item.disabled:hover {\n  color: #818a91;\n}\n.dropdown-item.disabled:focus, .dropdown-item.disabled:hover {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: \"progid:DXImageTransform.Microsoft.gradient(enabled = false)\";\n}\n\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1.5rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #818a91;\n  white-space: nowrap;\n}\n\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 0.3em solid;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 0.125rem;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n  margin-bottom: 0;\n}\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n  z-index: 2;\n}\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n\n.btn-toolbar {\n  margin-left: -0.5rem;\n}\n.btn-toolbar::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 0.5rem;\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group > .btn-group {\n  float: left;\n}\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n.btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n.btn + .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 1.125rem;\n  padding-left: 1.125rem;\n}\n\n.btn .caret {\n  margin-left: 0;\n}\n\n.btn-lg .caret, .btn-group-lg > .btn .caret {\n  border-width: 0.3em 0.3em 0;\n  border-bottom-width: 0;\n}\n\n.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret {\n  border-width: 0 0.3em 0.3em;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n[data-toggle=buttons] > .btn input[type=radio],\n[data-toggle=buttons] > .btn input[type=checkbox],\n[data-toggle=buttons] > .btn-group > .btn input[type=radio],\n[data-toggle=buttons] > .btn-group > .btn input[type=checkbox] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.input-group {\n  position: relative;\n  width: 100%;\n  display: table;\n  border-collapse: separate;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus, .input-group .form-control:active, .input-group .form-control:hover {\n  z-index: 3;\n}\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n\n.input-group-addon {\n  padding: 0.5rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  font-weight: normal;\n  line-height: 1.25;\n  color: #55595c;\n  text-align: center;\n  background-color: #eceeef;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n.input-group-addon.form-control-sm,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .input-group-addon.btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n.input-group-addon.form-control-lg,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .input-group-addon.btn {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n.input-group-addon input[type=radio],\n.input-group-addon input[type=checkbox] {\n  margin-top: 0;\n}\n\n.input-group .form-control:not(:last-child),\n.input-group-addon:not(:last-child),\n.input-group-btn:not(:last-child) > .btn,\n.input-group-btn:not(:last-child) > .btn-group > .btn,\n.input-group-btn:not(:last-child) > .dropdown-toggle,\n.input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.input-group-addon:not(:last-child) {\n  border-right: 0;\n}\n\n.input-group .form-control:not(:first-child),\n.input-group-addon:not(:first-child),\n.input-group-btn:not(:first-child) > .btn,\n.input-group-btn:not(:first-child) > .btn-group > .btn,\n.input-group-btn:not(:first-child) > .dropdown-toggle,\n.input-group-btn:not(:last-child) > .btn:not(:first-child),\n.input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.form-control + .input-group-addon:not(:first-child) {\n  border-left: 0;\n}\n\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:focus, .input-group-btn > .btn:active, .input-group-btn > .btn:hover {\n  z-index: 3;\n}\n.input-group-btn:not(:last-child) > .btn,\n.input-group-btn:not(:last-child) > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:not(:first-child) > .btn,\n.input-group-btn:not(:first-child) > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.input-group-btn:not(:first-child) > .btn:focus, .input-group-btn:not(:first-child) > .btn:active, .input-group-btn:not(:first-child) > .btn:hover,\n.input-group-btn:not(:first-child) > .btn-group:focus,\n.input-group-btn:not(:first-child) > .btn-group:active,\n.input-group-btn:not(:first-child) > .btn-group:hover {\n  z-index: 3;\n}\n\n.custom-control {\n  position: relative;\n  display: inline-block;\n  padding-left: 1.5rem;\n  cursor: pointer;\n}\n.custom-control + .custom-control {\n  margin-left: 1rem;\n}\n\n.custom-control-input {\n  position: absolute;\n  z-index: -1;\n  opacity: 0;\n}\n.custom-control-input:checked ~ .custom-control-indicator {\n  color: #fff;\n  background-color: #0074d9;\n}\n.custom-control-input:focus ~ .custom-control-indicator {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.2rem #0074d9;\n}\n.custom-control-input:active ~ .custom-control-indicator {\n  color: #fff;\n  background-color: #84c6ff;\n}\n.custom-control-input:disabled ~ .custom-control-indicator {\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.custom-control-input:disabled ~ .custom-control-description {\n  color: #767676;\n  cursor: not-allowed;\n}\n\n.custom-control-indicator {\n  position: absolute;\n  top: 0.25rem;\n  left: 0;\n  display: block;\n  width: 1rem;\n  height: 1rem;\n  pointer-events: none;\n  user-select: none;\n  background-color: #ddd;\n  background-repeat: no-repeat;\n  background-position: center center;\n  background-size: 50% 50%;\n}\n\n.custom-checkbox .custom-control-indicator {\n  border-radius: 0.25rem;\n}\n.custom-checkbox .custom-control-input:checked ~ .custom-control-indicator {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\");\n}\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-indicator {\n  background-color: #0074d9;\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#fff' d='M0 2h4'/%3E%3C/svg%3E\");\n}\n\n.custom-radio .custom-control-indicator {\n  border-radius: 50%;\n}\n.custom-radio .custom-control-input:checked ~ .custom-control-indicator {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#fff'/%3E%3C/svg%3E\");\n}\n\n.custom-controls-stacked .custom-control {\n  float: left;\n  clear: left;\n}\n.custom-controls-stacked .custom-control + .custom-control {\n  margin-left: 0;\n}\n\n.custom-select {\n  display: inline-block;\n  max-width: 100%;\n  height: calc(2.5rem - 2px);\n  padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n  padding-right: 0.75rem \\9 ;\n  color: #55595c;\n  vertical-align: middle;\n  background: #fff url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right 0.75rem center;\n  background-image: none \\9 ;\n  background-size: 8px 10px;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n  -moz-appearance: none;\n  -webkit-appearance: none;\n}\n.custom-select:focus {\n  border-color: #51a7e8;\n  outline: none;\n}\n.custom-select:focus::-ms-value {\n  color: #55595c;\n  background-color: #fff;\n}\n.custom-select:disabled {\n  color: #818a91;\n  cursor: not-allowed;\n  background-color: #eceeef;\n}\n.custom-select::-ms-expand {\n  opacity: 0;\n}\n\n.custom-select-sm {\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n  font-size: 75%;\n}\n\n.custom-file {\n  position: relative;\n  display: inline-block;\n  max-width: 100%;\n  height: 2.5rem;\n  cursor: pointer;\n}\n\n.custom-file-input {\n  min-width: 14rem;\n  max-width: 100%;\n  margin: 0;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.custom-file-control {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 5;\n  height: 2.5rem;\n  padding: 0.5rem 1rem;\n  line-height: 1.5;\n  color: #555;\n  user-select: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 0.25rem;\n}\n.custom-file-control:lang(en)::after {\n  content: \"Choose file...\";\n}\n.custom-file-control::before {\n  position: absolute;\n  top: -1px;\n  right: -1px;\n  bottom: -1px;\n  z-index: 6;\n  display: block;\n  height: 2.5rem;\n  padding: 0.5rem 1rem;\n  line-height: 1.5;\n  color: #555;\n  background-color: #eee;\n  border: 1px solid #ddd;\n  border-radius: 0 0.25rem 0.25rem 0;\n}\n.custom-file-control:lang(en)::before {\n  content: \"Browse\";\n}\n\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: inline-block;\n}\n.nav-link:focus, .nav-link:hover {\n  text-decoration: none;\n}\n.nav-link.disabled {\n  color: #818a91;\n}\n.nav-link.disabled, .nav-link.disabled:focus, .nav-link.disabled:hover {\n  color: #818a91;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n\n.nav-inline .nav-item {\n  display: inline-block;\n}\n.nav-inline .nav-item + .nav-item,\n.nav-inline .nav-link + .nav-link {\n  margin-left: 1rem;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.nav-tabs .nav-item {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs .nav-item + .nav-item {\n  margin-left: 0.2rem;\n}\n.nav-tabs .nav-link {\n  display: block;\n  padding: 0.5em 1em;\n  border: 1px solid transparent;\n  border-top-right-radius: 0.25rem;\n  border-top-left-radius: 0.25rem;\n}\n.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover {\n  border-color: #eceeef #eceeef #ddd;\n}\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link.disabled:focus, .nav-tabs .nav-link.disabled:hover {\n  color: #818a91;\n  background-color: transparent;\n  border-color: transparent;\n}\n.nav-tabs .nav-link.active, .nav-tabs .nav-link.active:focus, .nav-tabs .nav-link.active:hover,\n.nav-tabs .nav-item.open .nav-link,\n.nav-tabs .nav-item.open .nav-link:focus,\n.nav-tabs .nav-item.open .nav-link:hover {\n  color: #55595c;\n  background-color: #fff;\n  border-color: #ddd #ddd transparent;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.nav-pills::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.nav-pills .nav-item {\n  float: left;\n}\n.nav-pills .nav-item + .nav-item {\n  margin-left: 0.2rem;\n}\n.nav-pills .nav-link {\n  display: block;\n  padding: 0.5em 1em;\n  border-radius: 0;\n}\n.nav-pills .nav-link.active, .nav-pills .nav-link.active:focus, .nav-pills .nav-link.active:hover,\n.nav-pills .nav-item.open .nav-link,\n.nav-pills .nav-item.open .nav-link:focus,\n.nav-pills .nav-item.open .nav-link:hover {\n  color: white;\n  cursor: default;\n  background-color: #366e98;\n}\n\n.nav-stacked .nav-item {\n  display: block;\n  float: none;\n}\n.nav-stacked .nav-item + .nav-item {\n  margin-top: 0.2rem;\n  margin-left: 0;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  padding: 0.5rem 1rem;\n}\n.navbar::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n@media (min-width: 576px) {\n  .navbar {\n    border-radius: 0.25rem;\n  }\n}\n\n.navbar-full {\n  z-index: 1000;\n}\n@media (min-width: 576px) {\n  .navbar-full {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 576px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top {\n  top: 0;\n}\n\n.navbar-fixed-bottom {\n  bottom: 0;\n}\n\n.navbar-sticky-top {\n  position: sticky;\n  top: 0;\n  z-index: 1030;\n  width: 100%;\n}\n@media (min-width: 576px) {\n  .navbar-sticky-top {\n    border-radius: 0;\n  }\n}\n\n.navbar-brand {\n  float: left;\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  line-height: inherit;\n}\n.navbar-brand:focus, .navbar-brand:hover {\n  text-decoration: none;\n}\n\n.navbar-divider {\n  float: left;\n  width: 1px;\n  padding-top: 0.425rem;\n  padding-bottom: 0.425rem;\n  margin-right: 1rem;\n  margin-left: 1rem;\n  overflow: hidden;\n}\n.navbar-divider::before {\n  content: \" \";\n}\n\n.navbar-text {\n  display: inline-block;\n  padding-top: 0.425rem;\n  padding-bottom: 0.425rem;\n}\n\n.navbar-toggler {\n  width: 2.5em;\n  height: 2em;\n  padding: 0.5rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background: transparent no-repeat center center;\n  background-size: 24px 24px;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n.navbar-toggler:focus, .navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggleable-xs::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n@media (max-width: 575px) {\n  .navbar-toggleable-xs .navbar-brand {\n    display: block;\n    float: none;\n    margin-top: 0.5rem;\n    margin-right: 0;\n  }\n  .navbar-toggleable-xs .navbar-nav {\n    margin-top: 0.5rem;\n    margin-bottom: 0.5rem;\n  }\n  .navbar-toggleable-xs .navbar-nav .dropdown-menu {\n    position: static;\n    float: none;\n  }\n}\n@media (min-width: 576px) {\n  .navbar-toggleable-xs {\n    display: block;\n  }\n}\n.navbar-toggleable-sm::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n@media (max-width: 767px) {\n  .navbar-toggleable-sm .navbar-brand {\n    display: block;\n    float: none;\n    margin-top: 0.5rem;\n    margin-right: 0;\n  }\n  .navbar-toggleable-sm .navbar-nav {\n    margin-top: 0.5rem;\n    margin-bottom: 0.5rem;\n  }\n  .navbar-toggleable-sm .navbar-nav .dropdown-menu {\n    position: static;\n    float: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-toggleable-sm {\n    display: block;\n  }\n}\n.navbar-toggleable-md::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n@media (max-width: 991px) {\n  .navbar-toggleable-md .navbar-brand {\n    display: block;\n    float: none;\n    margin-top: 0.5rem;\n    margin-right: 0;\n  }\n  .navbar-toggleable-md .navbar-nav {\n    margin-top: 0.5rem;\n    margin-bottom: 0.5rem;\n  }\n  .navbar-toggleable-md .navbar-nav .dropdown-menu {\n    position: static;\n    float: none;\n  }\n}\n@media (min-width: 992px) {\n  .navbar-toggleable-md {\n    display: block;\n  }\n}\n.navbar-toggleable-lg::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n@media (max-width: 1199px) {\n  .navbar-toggleable-lg .navbar-brand {\n    display: block;\n    float: none;\n    margin-top: 0.5rem;\n    margin-right: 0;\n  }\n  .navbar-toggleable-lg .navbar-nav {\n    margin-top: 0.5rem;\n    margin-bottom: 0.5rem;\n  }\n  .navbar-toggleable-lg .navbar-nav .dropdown-menu {\n    position: static;\n    float: none;\n  }\n}\n@media (min-width: 1200px) {\n  .navbar-toggleable-lg {\n    display: block;\n  }\n}\n.navbar-toggleable-xl {\n  display: block;\n}\n.navbar-toggleable-xl::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.navbar-toggleable-xl .navbar-brand {\n  display: block;\n  float: none;\n  margin-top: 0.5rem;\n  margin-right: 0;\n}\n.navbar-toggleable-xl .navbar-nav {\n  margin-top: 0.5rem;\n  margin-bottom: 0.5rem;\n}\n.navbar-toggleable-xl .navbar-nav .dropdown-menu {\n  position: static;\n  float: none;\n}\n\n.navbar-nav .nav-item {\n  float: left;\n}\n.navbar-nav .nav-link {\n  display: block;\n  padding-top: 0.425rem;\n  padding-bottom: 0.425rem;\n}\n.navbar-nav .nav-link + .nav-link {\n  margin-left: 1rem;\n}\n.navbar-nav .nav-item + .nav-item {\n  margin-left: 1rem;\n}\n\n.navbar-light .navbar-brand,\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover,\n.navbar-light .navbar-toggler:focus,\n.navbar-light .navbar-toggler:hover {\n  color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.5);\n}\n.navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover {\n  color: rgba(0, 0, 0, 0.7);\n}\n.navbar-light .navbar-nav .open > .nav-link, .navbar-light .navbar-nav .open > .nav-link:focus, .navbar-light .navbar-nav .open > .nav-link:hover,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link:focus,\n.navbar-light .navbar-nav .active > .nav-link:hover,\n.navbar-light .navbar-nav .nav-link.open,\n.navbar-light .navbar-nav .nav-link.open:focus,\n.navbar-light .navbar-nav .nav-link.open:hover,\n.navbar-light .navbar-nav .nav-link.active,\n.navbar-light .navbar-nav .nav-link.active:focus,\n.navbar-light .navbar-nav .nav-link.active:hover {\n  color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-toggler {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E\");\n  border-color: rgba(0, 0, 0, 0.1);\n}\n.navbar-light .navbar-divider {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.navbar-dark .navbar-brand,\n.navbar-dark .navbar-toggler {\n  color: rgb(255, 255, 255);\n}\n.navbar-dark .navbar-brand:focus, .navbar-dark .navbar-brand:hover,\n.navbar-dark .navbar-toggler:focus,\n.navbar-dark .navbar-toggler:hover {\n  color: rgb(255, 255, 255);\n}\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.5);\n}\n.navbar-dark .navbar-nav .nav-link:focus, .navbar-dark .navbar-nav .nav-link:hover {\n  color: rgba(255, 255, 255, 0.75);\n}\n.navbar-dark .navbar-nav .open > .nav-link, .navbar-dark .navbar-nav .open > .nav-link:focus, .navbar-dark .navbar-nav .open > .nav-link:hover,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link:focus,\n.navbar-dark .navbar-nav .active > .nav-link:hover,\n.navbar-dark .navbar-nav .nav-link.open,\n.navbar-dark .navbar-nav .nav-link.open:focus,\n.navbar-dark .navbar-nav .nav-link.open:hover,\n.navbar-dark .navbar-nav .nav-link.active,\n.navbar-dark .navbar-nav .nav-link.active:focus,\n.navbar-dark .navbar-nav .nav-link.active:hover {\n  color: rgb(255, 255, 255);\n}\n.navbar-dark .navbar-toggler {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E\");\n  border-color: rgba(255, 255, 255, 0.1);\n}\n.navbar-dark .navbar-divider {\n  background-color: rgba(255, 255, 255, 0.075);\n}\n\n.navbar-toggleable-xs::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n@media (max-width: 575px) {\n  .navbar-toggleable-xs .navbar-nav .nav-item {\n    float: none;\n    margin-left: 0;\n  }\n}\n@media (min-width: 576px) {\n  .navbar-toggleable-xs {\n    display: block !important;\n  }\n}\n.navbar-toggleable-sm::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n@media (max-width: 767px) {\n  .navbar-toggleable-sm .navbar-nav .nav-item {\n    float: none;\n    margin-left: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-toggleable-sm {\n    display: block !important;\n  }\n}\n.navbar-toggleable-md::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n@media (max-width: 991px) {\n  .navbar-toggleable-md .navbar-nav .nav-item {\n    float: none;\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .navbar-toggleable-md {\n    display: block !important;\n  }\n}\n\n.card {\n  position: relative;\n  display: block;\n  margin-bottom: 0.75rem;\n  background-color: #fff;\n  border-radius: 0.25rem;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-block {\n  padding: 1.25rem;\n}\n.card-block::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n\n.card-title {\n  margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n  margin-top: -0.375rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link:hover {\n  text-decoration: none;\n}\n.card-link + .card-link {\n  margin-left: 1.25rem;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n  border-top-right-radius: 0.25rem;\n  border-top-left-radius: 0.25rem;\n}\n.card > .list-group:last-child .list-group-item:last-child {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.card-header {\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 0;\n  background-color: #f5f5f5;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-header::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.75rem 1.25rem;\n  background-color: #f5f5f5;\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-footer::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.625rem;\n  margin-bottom: -0.75rem;\n  margin-left: -0.625rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.625rem;\n  margin-left: -0.625rem;\n}\n\n.card-primary {\n  background-color: #366e98;\n  border-color: #366e98;\n}\n.card-primary .card-header,\n.card-primary .card-footer {\n  background-color: transparent;\n}\n\n.card-success {\n  background-color: #089944;\n  border-color: #089944;\n}\n.card-success .card-header,\n.card-success .card-footer {\n  background-color: transparent;\n}\n\n.card-info {\n  background-color: #044b7f;\n  border-color: #044b7f;\n}\n.card-info .card-header,\n.card-info .card-footer {\n  background-color: transparent;\n}\n\n.card-warning {\n  background-color: #eca649;\n  border-color: #eca649;\n}\n.card-warning .card-header,\n.card-warning .card-footer {\n  background-color: transparent;\n}\n\n.card-danger {\n  background-color: #990822;\n  border-color: #990822;\n}\n.card-danger .card-header,\n.card-danger .card-footer {\n  background-color: transparent;\n}\n\n.card-outline-primary {\n  background-color: transparent;\n  border-color: #366e98;\n}\n\n.card-outline-secondary {\n  background-color: transparent;\n  border-color: #ccc;\n}\n\n.card-outline-info {\n  background-color: transparent;\n  border-color: #044b7f;\n}\n\n.card-outline-success {\n  background-color: transparent;\n  border-color: #089944;\n}\n\n.card-outline-warning {\n  background-color: transparent;\n  border-color: #eca649;\n}\n\n.card-outline-danger {\n  background-color: transparent;\n  border-color: #990822;\n}\n\n.card-inverse .card-header,\n.card-inverse .card-footer {\n  border-color: rgba(255, 255, 255, 0.2);\n}\n.card-inverse .card-header,\n.card-inverse .card-footer,\n.card-inverse .card-title,\n.card-inverse .card-blockquote {\n  color: #fff;\n}\n.card-inverse .card-link,\n.card-inverse .card-text,\n.card-inverse .card-subtitle,\n.card-inverse .card-blockquote .blockquote-footer {\n  color: rgba(255, 255, 255, 0.65);\n}\n.card-inverse .card-link:focus, .card-inverse .card-link:hover {\n  color: #fff;\n}\n\n.card-blockquote {\n  padding: 0;\n  margin-bottom: 0;\n  border-left: 0;\n}\n\n.card-img {\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1.25rem;\n}\n\n.card-img-top {\n  border-top-right-radius: calc(0.25rem - 1px);\n  border-top-left-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n@media (min-width: 576px) {\n  .card-deck {\n    display: table;\n    width: 100%;\n    margin-bottom: 0.75rem;\n    table-layout: fixed;\n    border-spacing: 1.25rem 0;\n  }\n  .card-deck .card {\n    display: table-cell;\n    margin-bottom: 0;\n    vertical-align: top;\n  }\n  .card-deck-wrapper {\n    margin-right: -1.25rem;\n    margin-left: -1.25rem;\n  }\n}\n@media (min-width: 576px) {\n  .card-group {\n    display: table;\n    width: 100%;\n    table-layout: fixed;\n  }\n  .card-group .card {\n    display: table-cell;\n    vertical-align: top;\n  }\n  .card-group .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group .card:first-child {\n    border-bottom-right-radius: 0;\n    border-top-right-radius: 0;\n  }\n  .card-group .card:first-child .card-img-top {\n    border-top-right-radius: 0;\n  }\n  .card-group .card:first-child .card-img-bottom {\n    border-bottom-right-radius: 0;\n  }\n  .card-group .card:last-child {\n    border-bottom-left-radius: 0;\n    border-top-left-radius: 0;\n  }\n  .card-group .card:last-child .card-img-top {\n    border-top-left-radius: 0;\n  }\n  .card-group .card:last-child .card-img-bottom {\n    border-bottom-left-radius: 0;\n  }\n  .card-group .card:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  .card-group .card:not(:first-child):not(:last-child) .card-img-top,\n  .card-group .card:not(:first-child):not(:last-child) .card-img-bottom {\n    border-radius: 0;\n  }\n}\n@media (min-width: 576px) {\n  .card-columns {\n    column-count: 3;\n    column-gap: 1.25rem;\n  }\n  .card-columns .card {\n    display: inline-block;\n    width: 100%;\n  }\n}\n.breadcrumb {\n  padding: 0.75rem 1rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #eceeef;\n  border-radius: 0.25rem;\n}\n.breadcrumb::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n\n.breadcrumb-item {\n  float: left;\n}\n.breadcrumb-item + .breadcrumb-item::before {\n  display: inline-block;\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n  color: #818a91;\n  content: \"/\";\n}\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: underline;\n}\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: none;\n}\n.breadcrumb-item.active {\n  color: #818a91;\n}\n\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  border-radius: 0.25rem;\n}\n\n.page-item {\n  display: inline;\n}\n.page-item:first-child .page-link {\n  margin-left: 0;\n  border-bottom-left-radius: 0.25rem;\n  border-top-left-radius: 0.25rem;\n}\n.page-item:last-child .page-link {\n  border-bottom-right-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n.page-item.active .page-link, .page-item.active .page-link:focus, .page-item.active .page-link:hover {\n  z-index: 2;\n  color: #fff;\n  cursor: default;\n  background-color: #366e98;\n  border-color: #366e98;\n}\n.page-item.disabled .page-link, .page-item.disabled .page-link:focus, .page-item.disabled .page-link:hover {\n  color: #818a91;\n  pointer-events: none;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n\n.page-link {\n  position: relative;\n  float: left;\n  padding: 0.5rem 0.75rem;\n  margin-left: -1px;\n  color: #366e98;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.page-link:focus, .page-link:hover {\n  color: rgb(33.9466019417, 69.1504854369, 95.5533980583);\n  background-color: #eceeef;\n  border-color: #ddd;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n.pagination-lg .page-item:first-child .page-link {\n  border-bottom-left-radius: 0.3rem;\n  border-top-left-radius: 0.3rem;\n}\n.pagination-lg .page-item:last-child .page-link {\n  border-bottom-right-radius: 0.3rem;\n  border-top-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.275rem 0.75rem;\n  font-size: 0.875rem;\n}\n.pagination-sm .page-item:first-child .page-link {\n  border-bottom-left-radius: 0.2rem;\n  border-top-left-radius: 0.2rem;\n}\n.pagination-sm .page-item:last-child .page-link {\n  border-bottom-right-radius: 0.2rem;\n  border-top-right-radius: 0.2rem;\n}\n\n.tag {\n  display: inline-block;\n  padding: 0.25em 0.4em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n.tag:empty {\n  display: none;\n}\n\n.btn .tag {\n  position: relative;\n  top: -1px;\n}\n\na.tag:focus, a.tag:hover {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.tag-pill {\n  padding-right: 0.6em;\n  padding-left: 0.6em;\n  border-radius: 10rem;\n}\n\n.tag-default {\n  background-color: #818a91;\n}\n.tag-default[href]:focus, .tag-default[href]:hover {\n  background-color: rgb(103.9406779661, 112.4449152542, 119.0593220339);\n}\n\n.tag-primary {\n  background-color: #366e98;\n}\n.tag-primary[href]:focus, .tag-primary[href]:hover {\n  background-color: rgb(40.6310679612, 82.7669902913, 114.3689320388);\n}\n\n.tag-success {\n  background-color: #089944;\n}\n.tag-success[href]:focus, .tag-success[href]:hover {\n  background-color: rgb(5.4658385093, 104.5341614907, 46.4596273292);\n}\n\n.tag-info {\n  background-color: #044b7f;\n}\n.tag-info[href]:focus, .tag-info[href]:hover {\n  background-color: rgb(2.4427480916, 45.8015267176, 77.5572519084);\n}\n\n.tag-warning {\n  background-color: #eca649;\n}\n.tag-warning[href]:focus, .tag-warning[href]:hover {\n  background-color: rgb(231.1791044776, 143.4179104478, 26.8208955224);\n}\n\n.tag-danger {\n  background-color: #990822;\n}\n.tag-danger[href]:focus, .tag-danger[href]:hover {\n  background-color: rgb(104.5341614907, 5.4658385093, 23.2298136646);\n}\n\n.jumbotron {\n  padding: 2rem 1rem;\n  margin-bottom: 2rem;\n  background-color: #eceeef;\n  border-radius: 0.3rem;\n}\n@media (min-width: 576px) {\n  .jumbotron {\n    padding: 4rem 2rem;\n  }\n}\n\n.jumbotron-hr {\n  border-top-color: rgb(208.3142857143, 213.2285714286, 215.6857142857);\n}\n\n.jumbotron-fluid {\n  padding-right: 0;\n  padding-left: 0;\n  border-radius: 0;\n}\n\n.alert {\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: bold;\n}\n\n.alert-dismissible {\n  padding-right: 2.5rem;\n}\n.alert-dismissible .close {\n  position: relative;\n  top: -0.125rem;\n  right: -1.25rem;\n  color: inherit;\n}\n\n.alert-success {\n  background-color: #dff0d8;\n  border-color: rgb(207.8888888889, 232.9166666667, 197.5833333333);\n  color: #3c763d;\n}\n.alert-success hr {\n  border-top-color: rgb(192.7777777778, 225.8333333333, 179.1666666667);\n}\n.alert-success .alert-link {\n  color: rgb(42.808988764, 84.191011236, 43.5224719101);\n}\n\n.alert-info {\n  background-color: #d9edf7;\n  border-color: rgb(187.5086956522, 223.0304347826, 240.7913043478);\n  color: #31708f;\n}\n.alert-info hr {\n  border-top-color: rgb(166.4434782609, 213.052173913, 236.3565217391);\n}\n.alert-info .alert-link {\n  color: rgb(35.984375, 82.25, 105.015625);\n}\n\n.alert-warning {\n  background-color: #fcf8e3;\n  border-color: rgb(249.5322580645, 242.2419354839, 203.9677419355);\n  color: #8a6d3b;\n}\n.alert-warning hr {\n  border-top-color: rgb(247.064516129, 236.4838709677, 180.935483871);\n}\n.alert-warning .alert-link {\n  color: rgb(102.2741116751, 80.7817258883, 43.7258883249);\n}\n\n.alert-danger {\n  background-color: #f2dede;\n  border-color: rgb(234.7934782609, 203.7065217391, 203.7065217391);\n  color: #a94442;\n}\n.alert-danger hr {\n  border-top-color: rgb(227.5869565217, 185.4130434783, 185.4130434783);\n}\n.alert-danger .alert-link {\n  color: rgb(132.3234042553, 53.2425531915, 51.6765957447);\n}\n\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress, .limits, .usage {\n  display: block;\n  width: 100%;\n  height: 1rem;\n  margin-bottom: 1rem;\n}\n\n.progress[value], [value].limits, [value].usage {\n  background-color: #eee;\n  border: 0;\n  appearance: none;\n  border-radius: 0.25rem;\n}\n\n.progress[value]::-ms-fill, [value].limits::-ms-fill, [value].usage::-ms-fill {\n  background-color: #0074d9;\n  border: 0;\n}\n\n.progress[value]::-moz-progress-bar, [value].limits::-moz-progress-bar, [value].usage::-moz-progress-bar {\n  background-color: #0074d9;\n  border-bottom-left-radius: 0.25rem;\n  border-top-left-radius: 0.25rem;\n}\n\n.progress[value]::-webkit-progress-value, [value].limits::-webkit-progress-value, [value].usage::-webkit-progress-value {\n  background-color: #0074d9;\n  border-bottom-left-radius: 0.25rem;\n  border-top-left-radius: 0.25rem;\n}\n\n.progress[value=\"100\"]::-moz-progress-bar, [value=\"100\"].limits::-moz-progress-bar, [value=\"100\"].usage::-moz-progress-bar {\n  border-bottom-right-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.progress[value=\"100\"]::-webkit-progress-value, [value=\"100\"].limits::-webkit-progress-value, [value=\"100\"].usage::-webkit-progress-value {\n  border-bottom-right-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.progress[value]::-webkit-progress-bar, [value].limits::-webkit-progress-bar, [value].usage::-webkit-progress-bar {\n  background-color: #eee;\n  border-radius: 0.25rem;\n}\n\nbase::-moz-progress-bar,\n.progress[value],\n[value].limits,\n[value].usage {\n  background-color: #eee;\n  border-radius: 0.25rem;\n}\n\n@media screen and (min-width: 0\\0 ) {\n  .progress, .limits, .usage {\n    background-color: #eee;\n    border-radius: 0.25rem;\n  }\n  .progress-bar {\n    display: inline-block;\n    height: 1rem;\n    text-indent: -999rem;\n    background-color: #0074d9;\n    border-bottom-left-radius: 0.25rem;\n    border-top-left-radius: 0.25rem;\n  }\n  .progress[width=\"100%\"], [width=\"100%\"].limits, [width=\"100%\"].usage {\n    border-bottom-right-radius: 0.25rem;\n    border-top-right-radius: 0.25rem;\n  }\n}\n.progress-striped[value]::-webkit-progress-value {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-striped[value]::-moz-progress-bar {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-striped[value]::-ms-fill {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n@media screen and (min-width: 0\\0 ) {\n  .progress-bar-striped {\n    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n    background-size: 1rem 1rem;\n  }\n}\n.progress-animated[value]::-webkit-progress-value {\n  animation: progress-bar-stripes 2s linear infinite;\n}\n\n.progress-animated[value]::-moz-progress-bar {\n  animation: progress-bar-stripes 2s linear infinite;\n}\n\n@media screen and (min-width: 0\\0 ) {\n  .progress-animated .progress-bar-striped {\n    animation: progress-bar-stripes 2s linear infinite;\n  }\n}\n.progress-success[value]::-webkit-progress-value {\n  background-color: #089944;\n}\n.progress-success[value]::-moz-progress-bar {\n  background-color: #089944;\n}\n.progress-success[value]::-ms-fill {\n  background-color: #089944;\n}\n@media screen and (min-width: 0\\0 ) {\n  .progress-success .progress-bar {\n    background-color: #089944;\n  }\n}\n\n.progress-info[value]::-webkit-progress-value {\n  background-color: #044b7f;\n}\n.progress-info[value]::-moz-progress-bar {\n  background-color: #044b7f;\n}\n.progress-info[value]::-ms-fill {\n  background-color: #044b7f;\n}\n@media screen and (min-width: 0\\0 ) {\n  .progress-info .progress-bar {\n    background-color: #044b7f;\n  }\n}\n\n.progress-warning[value]::-webkit-progress-value {\n  background-color: #eca649;\n}\n.progress-warning[value]::-moz-progress-bar {\n  background-color: #eca649;\n}\n.progress-warning[value]::-ms-fill {\n  background-color: #eca649;\n}\n@media screen and (min-width: 0\\0 ) {\n  .progress-warning .progress-bar {\n    background-color: #eca649;\n  }\n}\n\n.progress-danger[value]::-webkit-progress-value {\n  background-color: #990822;\n}\n.progress-danger[value]::-moz-progress-bar {\n  background-color: #990822;\n}\n.progress-danger[value]::-ms-fill {\n  background-color: #990822;\n}\n@media screen and (min-width: 0\\0 ) {\n  .progress-danger .progress-bar {\n    background-color: #990822;\n  }\n}\n\n.media,\n.media-body {\n  overflow: hidden;\n}\n\n.media-body {\n  width: 10000px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n\n.media-middle {\n  vertical-align: middle;\n}\n\n.media-bottom {\n  vertical-align: bottom;\n}\n\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n\n.media-right {\n  padding-left: 10px;\n}\n\n.media-left {\n  padding-right: 10px;\n}\n\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-group {\n  padding-left: 0;\n  margin-bottom: 0;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.75rem 1.25rem;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-right-radius: 0.25rem;\n  border-top-left-radius: 0.25rem;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n.list-group-item.disabled, .list-group-item.disabled:focus, .list-group-item.disabled:hover {\n  color: #818a91;\n  cursor: not-allowed;\n  background-color: #eceeef;\n}\n.list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text {\n  color: #818a91;\n}\n.list-group-item.active, .list-group-item.active:focus, .list-group-item.active:hover {\n  z-index: 2;\n  color: #fff;\n  text-decoration: none;\n  background-color: #366e98;\n  border-color: #366e98;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text, .list-group-item.active:focus .list-group-item-text, .list-group-item.active:hover .list-group-item-text {\n  color: rgb(181.213592233, 208.3980582524, 228.786407767);\n}\n\n.list-group-flush .list-group-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #555;\n  text-align: inherit;\n}\n.list-group-item-action .list-group-item-heading {\n  color: #333;\n}\n.list-group-item-action:focus, .list-group-item-action:hover {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\n\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:focus, a.list-group-item-success:hover,\nbutton.list-group-item-success:focus,\nbutton.list-group-item-success:hover {\n  color: #3c763d;\n  background-color: rgb(207.8888888889, 232.9166666667, 197.5833333333);\n}\na.list-group-item-success.active, a.list-group-item-success.active:focus, a.list-group-item-success.active:hover,\nbutton.list-group-item-success.active,\nbutton.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:hover {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\n\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:focus, a.list-group-item-info:hover,\nbutton.list-group-item-info:focus,\nbutton.list-group-item-info:hover {\n  color: #31708f;\n  background-color: rgb(195.9347826087, 227.0217391304, 242.5652173913);\n}\na.list-group-item-info.active, a.list-group-item-info.active:focus, a.list-group-item-info.active:hover,\nbutton.list-group-item-info.active,\nbutton.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:hover {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\n\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:focus, a.list-group-item-warning:hover,\nbutton.list-group-item-warning:focus,\nbutton.list-group-item-warning:hover {\n  color: #8a6d3b;\n  background-color: rgb(249.5322580645, 242.2419354839, 203.9677419355);\n}\na.list-group-item-warning.active, a.list-group-item-warning.active:focus, a.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active,\nbutton.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:hover {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\n\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:focus, a.list-group-item-danger:hover,\nbutton.list-group-item-danger:focus,\nbutton.list-group-item-danger:hover {\n  color: #a94442;\n  background-color: rgb(234.7934782609, 203.7065217391, 203.7065217391);\n}\na.list-group-item-danger.active, a.list-group-item-danger.active:focus, a.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active,\nbutton.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:hover {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n\n.embed-responsive-21by9 {\n  padding-bottom: 42.8571428571%;\n}\n\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n\n.embed-responsive-1by1 {\n  padding-bottom: 100%;\n}\n\n.close {\n  float: right;\n  font-size: 1.5rem;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  opacity: 0.2;\n}\n.close:focus, .close:hover {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: 0.5;\n}\n\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n\n.modal-open {\n  overflow: hidden;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  transition: transform 0.3s ease-out;\n  transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  transform: translate(0, 0);\n}\n\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  opacity: 0;\n}\n.modal-backdrop.in {\n  opacity: 0.5;\n}\n\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n\n.modal-header .close {\n  margin-top: -2px;\n}\n\n.modal-title {\n  margin: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 600px;\n    margin: 30px auto;\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    max-width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  letter-spacing: normal;\n  line-break: auto;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  white-space: normal;\n  word-break: normal;\n  word-spacing: normal;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n.tooltip.in {\n  opacity: 0.9;\n}\n.tooltip.tooltip-top, .tooltip.bs-tether-element-attached-bottom {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.tooltip-top .tooltip-inner::before, .tooltip.bs-tether-element-attached-bottom .tooltip-inner::before {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  content: \"\";\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.tooltip-right, .tooltip.bs-tether-element-attached-left {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.tooltip-right .tooltip-inner::before, .tooltip.bs-tether-element-attached-left .tooltip-inner::before {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  content: \"\";\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.tooltip-bottom, .tooltip.bs-tether-element-attached-top {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.tooltip-bottom .tooltip-inner::before, .tooltip.bs-tether-element-attached-top .tooltip-inner::before {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  content: \"\";\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.tooltip-left, .tooltip.bs-tether-element-attached-right {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip.tooltip-left .tooltip-inner::before, .tooltip.bs-tether-element-attached-right .tooltip-inner::before {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  content: \"\";\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n.tooltip-inner::before {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: block;\n  max-width: 276px;\n  padding: 1px;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  letter-spacing: normal;\n  line-break: auto;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  white-space: normal;\n  word-break: normal;\n  word-spacing: normal;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n.popover.popover-top, .popover.bs-tether-element-attached-bottom {\n  margin-top: -10px;\n}\n.popover.popover-top::before, .popover.popover-top::after, .popover.bs-tether-element-attached-bottom::before, .popover.bs-tether-element-attached-bottom::after {\n  left: 50%;\n  border-bottom-width: 0;\n}\n.popover.popover-top::before, .popover.bs-tether-element-attached-bottom::before {\n  bottom: -11px;\n  margin-left: -11px;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n.popover.popover-top::after, .popover.bs-tether-element-attached-bottom::after {\n  bottom: -10px;\n  margin-left: -10px;\n  border-top-color: #fff;\n}\n.popover.popover-right, .popover.bs-tether-element-attached-left {\n  margin-left: 10px;\n}\n.popover.popover-right::before, .popover.popover-right::after, .popover.bs-tether-element-attached-left::before, .popover.bs-tether-element-attached-left::after {\n  top: 50%;\n  border-left-width: 0;\n}\n.popover.popover-right::before, .popover.bs-tether-element-attached-left::before {\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.popover-right::after, .popover.bs-tether-element-attached-left::after {\n  left: -10px;\n  margin-top: -10px;\n  border-right-color: #fff;\n}\n.popover.popover-bottom, .popover.bs-tether-element-attached-top {\n  margin-top: 10px;\n}\n.popover.popover-bottom::before, .popover.popover-bottom::after, .popover.bs-tether-element-attached-top::before, .popover.bs-tether-element-attached-top::after {\n  left: 50%;\n  border-top-width: 0;\n}\n.popover.popover-bottom::before, .popover.bs-tether-element-attached-top::before {\n  top: -11px;\n  margin-left: -11px;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.popover.popover-bottom::after, .popover.bs-tether-element-attached-top::after {\n  top: -10px;\n  margin-left: -10px;\n  border-bottom-color: rgb(247.35, 247.35, 247.35);\n}\n.popover.popover-bottom .popover-title::before, .popover.bs-tether-element-attached-top .popover-title::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 20px;\n  margin-left: -10px;\n  content: \"\";\n  border-bottom: 1px solid rgb(247.35, 247.35, 247.35);\n}\n.popover.popover-left, .popover.bs-tether-element-attached-right {\n  margin-left: -10px;\n}\n.popover.popover-left::before, .popover.popover-left::after, .popover.bs-tether-element-attached-right::before, .popover.bs-tether-element-attached-right::after {\n  top: 50%;\n  border-right-width: 0;\n}\n.popover.popover-left::before, .popover.bs-tether-element-attached-right::before {\n  right: -11px;\n  margin-top: -11px;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.popover-left::after, .popover.bs-tether-element-attached-right::after {\n  right: -10px;\n  margin-top: -10px;\n  border-left-color: #fff;\n}\n\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 1rem;\n  background-color: rgb(247.35, 247.35, 247.35);\n  border-bottom: 1px solid rgb(234.6, 234.6, 234.6);\n  border-radius: 0.2375rem 0.2375rem 0 0;\n}\n.popover-title:empty {\n  display: none;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\n\n.popover::before,\n.popover::after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.popover::before {\n  content: \"\";\n  border-width: 11px;\n}\n\n.popover::after {\n  content: \"\";\n  border-width: 10px;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .carousel-item {\n  position: relative;\n  display: none;\n  transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .carousel-item > img,\n.carousel-inner > .carousel-item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .carousel-item {\n    transition: transform 0.6s ease-in-out;\n    backface-visibility: hidden;\n    perspective: 1000px;\n  }\n  .carousel-inner > .carousel-item.next, .carousel-inner > .carousel-item.active.right {\n    left: 0;\n    transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .carousel-item.prev, .carousel-inner > .carousel-item.active.left {\n    left: 0;\n    transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .carousel-item.next.left, .carousel-inner > .carousel-item.prev.right, .carousel-inner > .carousel-item.active {\n    left: 0;\n    transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n  opacity: 0.5;\n}\n.carousel-control.left {\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#80000000\", endColorstr=\"#00000000\", GradientType=1);\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#00000000\", endColorstr=\"#80000000\", GradientType=1);\n}\n.carousel-control:focus, .carousel-control:hover {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev::before {\n  content: \"‹\";\n}\n.carousel-control .icon-next::before {\n  content: \"›\";\n}\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n\n@media (min-width: 576px) {\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    font-size: 30px;\n  }\n  .carousel-control .icon-prev {\n    margin-left: -15px;\n  }\n  .carousel-control .icon-next {\n    margin-right: -15px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.bg-faded {\n  background-color: #f7f7f9;\n}\n\n.bg-primary {\n  background-color: #366e98 !important;\n}\n\na.bg-primary:focus, a.bg-primary:hover {\n  background-color: rgb(40.6310679612, 82.7669902913, 114.3689320388) !important;\n}\n\n.bg-success {\n  background-color: #089944 !important;\n}\n\na.bg-success:focus, a.bg-success:hover {\n  background-color: rgb(5.4658385093, 104.5341614907, 46.4596273292) !important;\n}\n\n.bg-info {\n  background-color: #044b7f !important;\n}\n\na.bg-info:focus, a.bg-info:hover {\n  background-color: rgb(2.4427480916, 45.8015267176, 77.5572519084) !important;\n}\n\n.bg-warning {\n  background-color: #eca649 !important;\n}\n\na.bg-warning:focus, a.bg-warning:hover {\n  background-color: rgb(231.1791044776, 143.4179104478, 26.8208955224) !important;\n}\n\n.bg-danger {\n  background-color: #990822 !important;\n}\n\na.bg-danger:focus, a.bg-danger:hover {\n  background-color: rgb(104.5341614907, 5.4658385093, 23.2298136646) !important;\n}\n\n.bg-inverse {\n  background-color: #373a3c !important;\n}\n\na.bg-inverse:focus, a.bg-inverse:hover {\n  background-color: rgb(30.6086956522, 32.2782608696, 33.3913043478) !important;\n}\n\n.rounded {\n  border-radius: 0.25rem;\n}\n\n.rounded-top {\n  border-top-right-radius: 0.25rem;\n  border-top-left-radius: 0.25rem;\n}\n\n.rounded-right {\n  border-bottom-right-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.rounded-left {\n  border-bottom-left-radius: 0.25rem;\n  border-top-left-radius: 0.25rem;\n}\n\n.rounded-circle {\n  border-radius: 50%;\n}\n\n.clearfix::after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.float-xs-left {\n  float: left !important;\n}\n\n.float-xs-right {\n  float: right !important;\n}\n\n.float-xs-none {\n  float: none !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-left {\n    float: left !important;\n  }\n  .float-sm-right {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n}\n@media (min-width: 768px) {\n  .float-md-left {\n    float: left !important;\n  }\n  .float-md-right {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n}\n@media (min-width: 992px) {\n  .float-lg-left {\n    float: left !important;\n  }\n  .float-lg-right {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .float-xl-left {\n    float: left !important;\n  }\n  .float-xl-right {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.m-0 {\n  margin: 0 0 !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mr-0 {\n  margin-right: 0 !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.ml-0 {\n  margin-left: 0 !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.m-1 {\n  margin: 1rem 1rem !important;\n}\n\n.mt-1 {\n  margin-top: 1rem !important;\n}\n\n.mr-1 {\n  margin-right: 1rem !important;\n}\n\n.mb-1 {\n  margin-bottom: 1rem !important;\n}\n\n.ml-1 {\n  margin-left: 1rem !important;\n}\n\n.mx-1 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.my-1 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.m-2 {\n  margin: 1.5rem 1.5rem !important;\n}\n\n.mt-2 {\n  margin-top: 1.5rem !important;\n}\n\n.mr-2 {\n  margin-right: 1.5rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 1.5rem !important;\n}\n\n.ml-2 {\n  margin-left: 1.5rem !important;\n}\n\n.mx-2 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.my-2 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.m-3 {\n  margin: 3rem 3rem !important;\n}\n\n.mt-3 {\n  margin-top: 3rem !important;\n}\n\n.mr-3 {\n  margin-right: 3rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 3rem !important;\n}\n\n.ml-3 {\n  margin-left: 3rem !important;\n}\n\n.mx-3 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.my-3 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.p-0 {\n  padding: 0 0 !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pr-0 {\n  padding-right: 0 !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pl-0 {\n  padding-left: 0 !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.p-1 {\n  padding: 1rem 1rem !important;\n}\n\n.pt-1 {\n  padding-top: 1rem !important;\n}\n\n.pr-1 {\n  padding-right: 1rem !important;\n}\n\n.pb-1 {\n  padding-bottom: 1rem !important;\n}\n\n.pl-1 {\n  padding-left: 1rem !important;\n}\n\n.px-1 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.py-1 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.p-2 {\n  padding: 1.5rem 1.5rem !important;\n}\n\n.pt-2 {\n  padding-top: 1.5rem !important;\n}\n\n.pr-2 {\n  padding-right: 1.5rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pl-2 {\n  padding-left: 1.5rem !important;\n}\n\n.px-2 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.py-2 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.p-3 {\n  padding: 3rem 3rem !important;\n}\n\n.pt-3 {\n  padding-top: 3rem !important;\n}\n\n.pr-3 {\n  padding-right: 3rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 3rem !important;\n}\n\n.pl-3 {\n  padding-left: 3rem !important;\n}\n\n.px-3 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-3 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pos-f-t {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.text-justify {\n  text-align: justify !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.text-xs-left {\n  text-align: left !important;\n}\n\n.text-xs-right {\n  text-align: right !important;\n}\n\n.text-xs-center {\n  text-align: center !important;\n}\n\n@media (min-width: 576px) {\n  .text-sm-left {\n    text-align: left !important;\n  }\n  .text-sm-right {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 768px) {\n  .text-md-left {\n    text-align: left !important;\n  }\n  .text-md-right {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 992px) {\n  .text-lg-left {\n    text-align: left !important;\n  }\n  .text-lg-right {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .text-xl-left {\n    text-align: left !important;\n  }\n  .text-xl-right {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.font-weight-normal {\n  font-weight: normal;\n}\n\n.font-weight-bold {\n  font-weight: bold;\n}\n\n.font-italic {\n  font-style: italic;\n}\n\n.text-white {\n  color: #fff !important;\n}\n\n.text-muted, .xo-status-unknown, .xo-icon-unknown,\n.xo-status-paused,\n.xo-icon-vm-paused,\n.xo-icon-paused,\n.xo-status-disabled,\n.xo-icon-disabled,\n.xo-icon-host-disabled {\n  color: #818a91 !important;\n}\n\na.text-muted:focus, a.xo-status-unknown:focus, a.xo-icon-unknown:focus,\na.xo-status-paused:focus,\na.xo-icon-vm-paused:focus,\na.xo-icon-paused:focus,\na.xo-status-disabled:focus,\na.xo-icon-disabled:focus,\na.xo-icon-host-disabled:focus, a.text-muted:hover, a.xo-status-unknown:hover, a.xo-icon-unknown:hover,\na.xo-status-paused:hover,\na.xo-icon-vm-paused:hover,\na.xo-icon-paused:hover,\na.xo-status-disabled:hover,\na.xo-icon-disabled:hover,\na.xo-icon-host-disabled:hover {\n  color: rgb(103.9406779661, 112.4449152542, 119.0593220339) !important;\n}\n\n.text-primary, .xo-icon-vm-docker {\n  color: #366e98 !important;\n}\n\na.text-primary:focus, a.xo-icon-vm-docker:focus, a.text-primary:hover, a.xo-icon-vm-docker:hover {\n  color: rgb(40.6310679612, 82.7669902913, 114.3689320388) !important;\n}\n\n.text-success, .xo-status-running, .xo-icon-vm-running, .xo-icon-running, .xo-icon-all-connected, .xo-icon-host-running, .xo-icon-true, .xo-icon-success {\n  color: #089944 !important;\n}\n\na.text-success:focus, a.xo-status-running:focus, a.xo-icon-vm-running:focus, a.xo-icon-running:focus, a.xo-icon-all-connected:focus, a.xo-icon-host-running:focus, a.xo-icon-true:focus, a.xo-icon-success:focus, a.text-success:hover, a.xo-status-running:hover, a.xo-icon-vm-running:hover, a.xo-icon-running:hover, a.xo-icon-all-connected:hover, a.xo-icon-host-running:hover, a.xo-icon-true:hover, a.xo-icon-success:hover {\n  color: rgb(5.4658385093, 104.5341614907, 46.4596273292) !important;\n}\n\n.text-info, .xo-status-suspended, .xo-icon-vm-suspended, .xo-icon-skipped, .xo-icon-suspended {\n  color: #044b7f !important;\n}\n\na.text-info:focus, a.xo-status-suspended:focus, a.xo-icon-vm-suspended:focus, a.xo-icon-skipped:focus, a.xo-icon-suspended:focus, a.text-info:hover, a.xo-status-suspended:hover, a.xo-icon-vm-suspended:hover, a.xo-icon-skipped:hover, a.xo-icon-suspended:hover {\n  color: rgb(2.4427480916, 45.8015267176, 77.5572519084) !important;\n}\n\n.text-warning, .xo-status-busy, .xo-icon-vm-busy, .xo-icon-busy, .xo-icon-some-connected, .xo-icon-host-busy, .xo-icon-undo {\n  color: #eca649 !important;\n}\n\na.text-warning:focus, a.xo-status-busy:focus, a.xo-icon-vm-busy:focus, a.xo-icon-busy:focus, a.xo-icon-some-connected:focus, a.xo-icon-host-busy:focus, a.xo-icon-undo:focus, a.text-warning:hover, a.xo-status-busy:hover, a.xo-icon-vm-busy:hover, a.xo-icon-busy:hover, a.xo-icon-some-connected:hover, a.xo-icon-host-busy:hover, a.xo-icon-undo:hover {\n  color: rgb(231.1791044776, 143.4179104478, 26.8208955224) !important;\n}\n\n.text-danger, .xo-status-halted, .xo-icon-vm-halted, .xo-icon-halted, .xo-icon-all-disconnected, .xo-icon-host-halted, .xo-icon-error {\n  color: #990822 !important;\n}\n\na.text-danger:focus, a.xo-status-halted:focus, a.xo-icon-vm-halted:focus, a.xo-icon-halted:focus, a.xo-icon-all-disconnected:focus, a.xo-icon-host-halted:focus, a.xo-icon-error:focus, a.text-danger:hover, a.xo-status-halted:hover, a.xo-icon-vm-halted:hover, a.xo-icon-halted:hover, a.xo-icon-all-disconnected:hover, a.xo-icon-host-halted:hover, a.xo-icon-error:hover {\n  color: rgb(104.5341614907, 5.4658385093, 23.2298136646) !important;\n}\n\n.text-gray-dark {\n  color: #373a3c !important;\n}\n\na.text-gray-dark:focus, a.text-gray-dark:hover {\n  color: rgb(30.6086956522, 32.2782608696, 33.3913043478) !important;\n}\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n.hidden-xs-up {\n  display: none !important;\n}\n\n@media (max-width: 575px) {\n  .hidden-xs-down {\n    display: none !important;\n  }\n}\n\n@media (min-width: 576px) {\n  .hidden-sm-up {\n    display: none !important;\n  }\n}\n\n@media (max-width: 767px) {\n  .hidden-sm-down {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .hidden-md-up {\n    display: none !important;\n  }\n}\n\n@media (max-width: 991px) {\n  .hidden-md-down {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .hidden-lg-up {\n    display: none !important;\n  }\n}\n\n@media (max-width: 1199px) {\n  .hidden-lg-down {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-xl-up {\n    display: none !important;\n  }\n}\n\n.hidden-xl-down {\n  display: none !important;\n}\n\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n\n.text-monospace {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n  font-family: \"FontAwesome\";\n  src: url(\"./fontawesome-webfont.eot?v=4.7.0\");\n  src: url(\"./fontawesome-webfont.eot?#iefix&v=4.7.0\") format(\"embedded-opentype\"), url(\"./fontawesome-webfont.woff2?v=4.7.0\") format(\"woff2\"), url(\"./fontawesome-webfont.woff?v=4.7.0\") format(\"woff\"), url(\"./fontawesome-webfont.ttf?v=4.7.0\") format(\"truetype\"), url(\"./fontawesome-webfont.svg?v=4.7.0#fontawesomeregular\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal;\n}\n.fa, .xo-icon-fix, .xo-icon-restart, .xo-icon-xo-cloud-config, .xo-icon-open-tunnel, .xo-icon-reply, .xo-icon-notification, .xo-icon-support, .xo-icon-plan-trial, .xo-icon-plan-upgrade, .xo-icon-cancel, .xo-icon-add-host, .xo-icon-add-vm, .xo-icon-add-sr, .xo-icon-not-registered, .xo-icon-update-ready, .xo-icon-update-unknown, .xo-icon-upgrade, .xo-icon-help, .xo-icon-bug, .xo-icon-nav, .xo-icon-rest-api, .xo-icon-windows, .xo-icon-ubuntu, .xo-icon-suse, .xo-icon-solaris, .xo-icon-redhat, .xo-icon-osx, .xo-icon-oracle, .xo-icon-netbsd, .xo-icon-linux-mint, .xo-icon-linux, .xo-icon-gentoo, .xo-icon-freebsd, .xo-icon-fedora, .xo-icon-docker, .xo-icon-debian, .xo-icon-centos, .xo-icon-new-network-create, .xo-icon-new-vm-remove, .xo-icon-new-vm-add, .xo-icon-new-vm-reset, .xo-icon-new-vm-create, .xo-icon-new-vm-summary, .xo-icon-new-vm-disks, .xo-icon-new-vm-interfaces, .xo-icon-new-vm-install-settings, .xo-icon-new-vm-perf, .xo-icon-new-vm-infos, .xo-icon-menu-hub, .xo-icon-menu-xostor, .xo-icon-menu-new-import, .xo-icon-menu-new-network, .xo-icon-menu-new-sr, .xo-icon-menu-new-vm, .xo-icon-menu-new, .xo-icon-menu-about, .xo-icon-menu-settings-config, .xo-icon-menu-settings-logs, .xo-icon-menu-settings-plugins, .xo-icon-menu-settings-acls, .xo-icon-menu-settings-groups, .xo-icon-menu-settings-users, .xo-icon-menu-settings-servers, .xo-icon-menu-settings, .xo-icon-menu-support, .xo-icon-menu-notification, .xo-icon-menu-license, .xo-icon-menu-update, .xo-icon-menu-xoa, .xo-icon-menu-jobs-schedule, .xo-icon-menu-jobs-new, .xo-icon-menu-jobs-overview, .xo-icon-menu-jobs, .xo-icon-menu-backup-file-restore, .xo-icon-menu-backup-restore, .xo-icon-menu-backup-remotes, .xo-icon-menu-backup-new, .xo-icon-menu-backup-sequence, .xo-icon-menu-backup-overview, .xo-icon-menu-backup, .xo-icon-menu-self-service, .xo-icon-menu-dashboard-health, .xo-icon-menu-dashboard-stats, .xo-icon-menu-dashboard-visualization, .xo-icon-menu-dashboard-overview, .xo-icon-menu-dashboard, .xo-icon-menu-home, .xo-icon-menu-collapse, .xo-icon-multiline-clipboard, .xo-icon-sign-out, .xo-icon-group, .xo-icon-user, .xo-icon-run-schedule, .xo-icon-arrow-right, .xo-icon-database, .xo-icon-time, .xo-icon-schedule, .xo-icon-export, .xo-icon-import, .xo-icon-preview, .xo-icon-clear-search, .xo-icon-plus, .xo-icon-minus, .xo-icon-rdp, .xo-icon-remove, .xo-icon-save, .xo-icon-reset, .xo-icon-add-tag, .xo-icon-add, .xo-icon-remove-tag, .xo-icon-tags, .xo-icon-filters, .xo-icon-snapshot-current-state, .xo-icon-snapshot-delete, .xo-icon-snapshot-revert, .xo-icon-host-new, .xo-icon-vm-new, .xo-icon-host-keyboard, .xo-icon-vm-keyboard, .xo-icon-host-eject, .xo-icon-vm-eject, .xo-icon-host-reboot, .xo-icon-vm-reboot, .xo-icon-host-force-reboot, .xo-icon-host-stop, .xo-icon-vm-stop, .xo-icon-host-delete, .xo-icon-vm-delete, .xo-icon-host-start, .xo-icon-vm-start, .xo-icon-vif-disable, .xo-icon-pool-rolling-reboot, .xo-icon-pool-rolling-update, .xo-icon-host-patch-update, .xo-icon-host-emergency-shutdown, .xo-icon-host-restart-agent, .xo-icon-host-disable, .xo-icon-host-enable, .xo-icon-host-forget, .xo-icon-host-busy, .xo-icon-host-disabled, .xo-icon-host-halted, .xo-icon-host-running, .xo-icon-sr-reclaim-space, .xo-icon-vdi-reclaim-space, .xo-icon-sr-migrate, .xo-icon-vdi-migrate, .xo-icon-sr-remove, .xo-icon-vdi-remove, .xo-icon-sr-forget, .xo-icon-vdi-forget, .xo-icon-sr-disconnect-all, .xo-icon-vdi-disconnect-all, .xo-icon-sr-reconnect-all, .xo-icon-vdi-reconnect-all, .xo-icon-sr-enable, .xo-icon-vdi-enable, .xo-icon-sr-disable, .xo-icon-vdi-disable, .xo-icon-task-destroy, .xo-icon-task-cancel, .xo-icon-disconnected, .xo-icon-connected, .xo-icon-all-disconnected, .xo-icon-some-connected, .xo-icon-all-connected, .xo-icon-powerState, .xo-icon-disabled, .xo-icon-busy, .xo-icon-unknown, .xo-icon-paused, .xo-icon-suspended, .xo-icon-halted, .xo-icon-skipped, .xo-icon-running, .xo-icon-vm-coalesce-leaf, .xo-icon-vm-warm-migration, .xo-icon-vm-share, .xo-icon-vm-docker, .xo-icon-vm-force-shutdown, .xo-icon-vm-recovery-mode, .xo-icon-vm-force-reboot, .xo-icon-vm-pause, .xo-icon-vm-suspend, .xo-icon-vm-clone, .xo-icon-vm-fast-clone, .xo-icon-vm-snapshot, .xo-icon-vm-migrate, .xo-icon-vm-console, .xo-icon-vm-copy, .xo-icon-vm-create-template, .xo-icon-vm-busy, .xo-icon-vm-halted, .xo-icon-vm-paused, .xo-icon-vm-suspended, .xo-icon-vm-running, .xo-icon-bios-version, .xo-icon-total-power, .xo-icon-psu, .xo-icon-outlet, .xo-icon-ipmi, .xo-icon-inlet, .xo-icon-fan-status, .xo-icon-fan-speed, .xo-icon-cpu-temperature, .xo-icon-migrate-job, .xo-icon-jobs, .xo-icon-health, .xo-icon-folder, .xo-icon-files, .xo-icon-continuous-replication, .xo-icon-disaster-recovery, .xo-icon-delta-backup, .xo-icon-rolling-snapshot, .xo-icon-restore, .xo-icon-mirror-backup, .xo-icon-check, .xo-icon-backup, .xo-icon-favorite, .xo-icon-api, .xo-icon-circle-thin, .xo-icon-circle, .xo-icon-ticket, .xo-icon-telemetry, .xo-icon-deploy, .xo-icon-trial, .xo-icon-resource-set, .xo-icon-self-service, .xo-icon-delete, .xo-icon-iowait, .xo-icon-latency, .xo-icon-iops, .xo-icon-sr, .xo-icon-network, .xo-icon-disk, .xo-icon-memory, .xo-icon-vgpu, .xo-icon-gpu, .xo-icon-cpu, .xo-icon-unknown-status, .xo-icon-unlock, .xo-icon-lock, .xo-icon-disconnect, .xo-icon-connect, .xo-icon-sort, .xo-icon-desc, .xo-icon-asc, .xo-icon-scale, .xo-icon-toggle-off, .xo-icon-toggle-on, .xo-icon-password, .xo-icon-hidden, .xo-icon-shown, .xo-icon-file, .xo-icon-ip, .xo-icon-ssh-key, .xo-icon-force-restart, .xo-icon-destroy, .xo-icon-forget, .xo-icon-freeze, .xo-icon-run, .xo-icon-summary, .xo-icon-settings, .xo-icon-search, .xo-icon-info, .xo-icon-git, .xo-icon-shortcuts, .xo-icon-upload, .xo-icon-download, .xo-icon-clipboard, .xo-icon-loading, .xo-icon-coalesce, .xo-icon-caret-up, .xo-icon-caret, .xo-icon-next, .xo-icon-previous, .xo-icon-grab, .xo-icon-audit, .xo-icon-hub-template, .xo-icon-hub-recipe, .xo-icon-chevron-down, .xo-icon-chevron-up, .xo-icon-diagnosis, .xo-icon-administration, .xo-icon-refresh, .xo-icon-edit, .xo-icon-edition, .xo-icon-undo, .xo-icon-false, .xo-icon-true, .xo-icon-success, .xo-icon-error, .xo-icon-alarm, .xo-icon-logs, .xo-icon-message, .xo-icon-plugin, .xo-icon-template, .xo-icon-clean-vm, .xo-icon-task, .xo-icon-remote, .xo-icon-proxy, .xo-icon-vm, .xo-icon-host, .xo-icon-pool, .xo-icon-pro-support, .glyphicon {\n  display: inline-block;\n  font: normal normal normal 14px/1 FontAwesome;\n  font-size: inherit;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n  font-size: 1.3333333333em;\n  line-height: 0.75em;\n  vertical-align: -15%;\n}\n\n.fa-2x {\n  font-size: 2em;\n}\n\n.fa-3x {\n  font-size: 3em;\n}\n\n.fa-4x {\n  font-size: 4em;\n}\n\n.fa-5x {\n  font-size: 5em;\n}\n\n.fa-fw {\n  width: 1.2857142857em;\n  text-align: center;\n}\n\n.fa-ul {\n  padding-left: 0;\n  margin-left: 2.1428571429em;\n  list-style-type: none;\n}\n.fa-ul > li {\n  position: relative;\n}\n\n.fa-li {\n  position: absolute;\n  left: -2.1428571429em;\n  width: 2.1428571429em;\n  top: 0.1428571429em;\n  text-align: center;\n}\n.fa-li.fa-lg {\n  left: -1.8571428571em;\n}\n\n.fa-border {\n  padding: 0.2em 0.25em 0.15em;\n  border: solid 0.08em #eee;\n  border-radius: 0.1em;\n}\n\n.fa-pull-left {\n  float: left;\n}\n\n.fa-pull-right {\n  float: right;\n}\n\n.fa.fa-pull-left, .fa-pull-left.xo-icon-fix, .fa-pull-left.xo-icon-restart, .fa-pull-left.xo-icon-xo-cloud-config, .fa-pull-left.xo-icon-open-tunnel, .fa-pull-left.xo-icon-reply, .fa-pull-left.xo-icon-notification, .fa-pull-left.xo-icon-support, .fa-pull-left.xo-icon-plan-trial, .fa-pull-left.xo-icon-plan-upgrade, .fa-pull-left.xo-icon-cancel, .fa-pull-left.xo-icon-add-host, .fa-pull-left.xo-icon-add-vm, .fa-pull-left.xo-icon-add-sr, .fa-pull-left.xo-icon-not-registered, .fa-pull-left.xo-icon-update-ready, .fa-pull-left.xo-icon-update-unknown, .fa-pull-left.xo-icon-upgrade, .fa-pull-left.xo-icon-help, .fa-pull-left.xo-icon-bug, .fa-pull-left.xo-icon-nav, .fa-pull-left.xo-icon-rest-api, .fa-pull-left.xo-icon-windows, .fa-pull-left.xo-icon-ubuntu, .fa-pull-left.xo-icon-suse, .fa-pull-left.xo-icon-solaris, .fa-pull-left.xo-icon-redhat, .fa-pull-left.xo-icon-osx, .fa-pull-left.xo-icon-oracle, .fa-pull-left.xo-icon-netbsd, .fa-pull-left.xo-icon-linux-mint, .fa-pull-left.xo-icon-linux, .fa-pull-left.xo-icon-gentoo, .fa-pull-left.xo-icon-freebsd, .fa-pull-left.xo-icon-fedora, .fa-pull-left.xo-icon-docker, .fa-pull-left.xo-icon-debian, .fa-pull-left.xo-icon-centos, .fa-pull-left.xo-icon-new-network-create, .fa-pull-left.xo-icon-new-vm-remove, .fa-pull-left.xo-icon-new-vm-add, .fa-pull-left.xo-icon-new-vm-reset, .fa-pull-left.xo-icon-new-vm-create, .fa-pull-left.xo-icon-new-vm-summary, .fa-pull-left.xo-icon-new-vm-disks, .fa-pull-left.xo-icon-new-vm-interfaces, .fa-pull-left.xo-icon-new-vm-install-settings, .fa-pull-left.xo-icon-new-vm-perf, .fa-pull-left.xo-icon-new-vm-infos, .fa-pull-left.xo-icon-menu-hub, .fa-pull-left.xo-icon-menu-xostor, .fa-pull-left.xo-icon-menu-new-import, .fa-pull-left.xo-icon-menu-new-network, .fa-pull-left.xo-icon-menu-new-sr, .fa-pull-left.xo-icon-menu-new-vm, .fa-pull-left.xo-icon-menu-new, .fa-pull-left.xo-icon-menu-about, .fa-pull-left.xo-icon-menu-settings-config, .fa-pull-left.xo-icon-menu-settings-logs, .fa-pull-left.xo-icon-menu-settings-plugins, .fa-pull-left.xo-icon-menu-settings-acls, .fa-pull-left.xo-icon-menu-settings-groups, .fa-pull-left.xo-icon-menu-settings-users, .fa-pull-left.xo-icon-menu-settings-servers, .fa-pull-left.xo-icon-menu-settings, .fa-pull-left.xo-icon-menu-support, .fa-pull-left.xo-icon-menu-notification, .fa-pull-left.xo-icon-menu-license, .fa-pull-left.xo-icon-menu-update, .fa-pull-left.xo-icon-menu-xoa, .fa-pull-left.xo-icon-menu-jobs-schedule, .fa-pull-left.xo-icon-menu-jobs-new, .fa-pull-left.xo-icon-menu-jobs-overview, .fa-pull-left.xo-icon-menu-jobs, .fa-pull-left.xo-icon-menu-backup-file-restore, .fa-pull-left.xo-icon-menu-backup-restore, .fa-pull-left.xo-icon-menu-backup-remotes, .fa-pull-left.xo-icon-menu-backup-new, .fa-pull-left.xo-icon-menu-backup-sequence, .fa-pull-left.xo-icon-menu-backup-overview, .fa-pull-left.xo-icon-menu-backup, .fa-pull-left.xo-icon-menu-self-service, .fa-pull-left.xo-icon-menu-dashboard-health, .fa-pull-left.xo-icon-menu-dashboard-stats, .fa-pull-left.xo-icon-menu-dashboard-visualization, .fa-pull-left.xo-icon-menu-dashboard-overview, .fa-pull-left.xo-icon-menu-dashboard, .fa-pull-left.xo-icon-menu-home, .fa-pull-left.xo-icon-menu-collapse, .fa-pull-left.xo-icon-multiline-clipboard, .fa-pull-left.xo-icon-sign-out, .fa-pull-left.xo-icon-group, .fa-pull-left.xo-icon-user, .fa-pull-left.xo-icon-run-schedule, .fa-pull-left.xo-icon-arrow-right, .fa-pull-left.xo-icon-database, .fa-pull-left.xo-icon-time, .fa-pull-left.xo-icon-schedule, .fa-pull-left.xo-icon-export, .fa-pull-left.xo-icon-import, .fa-pull-left.xo-icon-preview, .fa-pull-left.xo-icon-clear-search, .fa-pull-left.xo-icon-plus, .fa-pull-left.xo-icon-minus, .fa-pull-left.xo-icon-rdp, .fa-pull-left.xo-icon-remove, .fa-pull-left.xo-icon-save, .fa-pull-left.xo-icon-reset, .fa-pull-left.xo-icon-add-tag, .fa-pull-left.xo-icon-add, .fa-pull-left.xo-icon-remove-tag, .fa-pull-left.xo-icon-tags, .fa-pull-left.xo-icon-filters, .fa-pull-left.xo-icon-snapshot-current-state, .fa-pull-left.xo-icon-snapshot-delete, .fa-pull-left.xo-icon-snapshot-revert, .fa-pull-left.xo-icon-host-new, .fa-pull-left.xo-icon-vm-new, .fa-pull-left.xo-icon-host-keyboard, .fa-pull-left.xo-icon-vm-keyboard, .fa-pull-left.xo-icon-host-eject, .fa-pull-left.xo-icon-vm-eject, .fa-pull-left.xo-icon-host-reboot, .fa-pull-left.xo-icon-vm-reboot, .fa-pull-left.xo-icon-host-force-reboot, .fa-pull-left.xo-icon-host-stop, .fa-pull-left.xo-icon-vm-stop, .fa-pull-left.xo-icon-host-delete, .fa-pull-left.xo-icon-vm-delete, .fa-pull-left.xo-icon-host-start, .fa-pull-left.xo-icon-vm-start, .fa-pull-left.xo-icon-vif-disable, .fa-pull-left.xo-icon-pool-rolling-reboot, .fa-pull-left.xo-icon-pool-rolling-update, .fa-pull-left.xo-icon-host-patch-update, .fa-pull-left.xo-icon-host-emergency-shutdown, .fa-pull-left.xo-icon-host-restart-agent, .fa-pull-left.xo-icon-host-disable, .fa-pull-left.xo-icon-host-enable, .fa-pull-left.xo-icon-host-forget, .fa-pull-left.xo-icon-host-busy, .fa-pull-left.xo-icon-host-disabled, .fa-pull-left.xo-icon-host-halted, .fa-pull-left.xo-icon-host-running, .fa-pull-left.xo-icon-sr-reclaim-space, .fa-pull-left.xo-icon-vdi-reclaim-space, .fa-pull-left.xo-icon-sr-migrate, .fa-pull-left.xo-icon-vdi-migrate, .fa-pull-left.xo-icon-sr-remove, .fa-pull-left.xo-icon-vdi-remove, .fa-pull-left.xo-icon-sr-forget, .fa-pull-left.xo-icon-vdi-forget, .fa-pull-left.xo-icon-sr-disconnect-all, .fa-pull-left.xo-icon-vdi-disconnect-all, .fa-pull-left.xo-icon-sr-reconnect-all, .fa-pull-left.xo-icon-vdi-reconnect-all, .fa-pull-left.xo-icon-sr-enable, .fa-pull-left.xo-icon-vdi-enable, .fa-pull-left.xo-icon-sr-disable, .fa-pull-left.xo-icon-vdi-disable, .fa-pull-left.xo-icon-task-destroy, .fa-pull-left.xo-icon-task-cancel, .fa-pull-left.xo-icon-disconnected, .fa-pull-left.xo-icon-connected, .fa-pull-left.xo-icon-all-disconnected, .fa-pull-left.xo-icon-some-connected, .fa-pull-left.xo-icon-all-connected, .fa-pull-left.xo-icon-powerState, .fa-pull-left.xo-icon-disabled, .fa-pull-left.xo-icon-busy, .fa-pull-left.xo-icon-unknown, .fa-pull-left.xo-icon-paused, .fa-pull-left.xo-icon-suspended, .fa-pull-left.xo-icon-halted, .fa-pull-left.xo-icon-skipped, .fa-pull-left.xo-icon-running, .fa-pull-left.xo-icon-vm-coalesce-leaf, .fa-pull-left.xo-icon-vm-warm-migration, .fa-pull-left.xo-icon-vm-share, .fa-pull-left.xo-icon-vm-docker, .fa-pull-left.xo-icon-vm-force-shutdown, .fa-pull-left.xo-icon-vm-recovery-mode, .fa-pull-left.xo-icon-vm-force-reboot, .fa-pull-left.xo-icon-vm-pause, .fa-pull-left.xo-icon-vm-suspend, .fa-pull-left.xo-icon-vm-clone, .fa-pull-left.xo-icon-vm-fast-clone, .fa-pull-left.xo-icon-vm-snapshot, .fa-pull-left.xo-icon-vm-migrate, .fa-pull-left.xo-icon-vm-console, .fa-pull-left.xo-icon-vm-copy, .fa-pull-left.xo-icon-vm-create-template, .fa-pull-left.xo-icon-vm-busy, .fa-pull-left.xo-icon-vm-halted, .fa-pull-left.xo-icon-vm-paused, .fa-pull-left.xo-icon-vm-suspended, .fa-pull-left.xo-icon-vm-running, .fa-pull-left.xo-icon-bios-version, .fa-pull-left.xo-icon-total-power, .fa-pull-left.xo-icon-psu, .fa-pull-left.xo-icon-outlet, .fa-pull-left.xo-icon-ipmi, .fa-pull-left.xo-icon-inlet, .fa-pull-left.xo-icon-fan-status, .fa-pull-left.xo-icon-fan-speed, .fa-pull-left.xo-icon-cpu-temperature, .fa-pull-left.xo-icon-migrate-job, .fa-pull-left.xo-icon-jobs, .fa-pull-left.xo-icon-health, .fa-pull-left.xo-icon-folder, .fa-pull-left.xo-icon-files, .fa-pull-left.xo-icon-continuous-replication, .fa-pull-left.xo-icon-disaster-recovery, .fa-pull-left.xo-icon-delta-backup, .fa-pull-left.xo-icon-rolling-snapshot, .fa-pull-left.xo-icon-restore, .fa-pull-left.xo-icon-mirror-backup, .fa-pull-left.xo-icon-check, .fa-pull-left.xo-icon-backup, .fa-pull-left.xo-icon-favorite, .fa-pull-left.xo-icon-api, .fa-pull-left.xo-icon-circle-thin, .fa-pull-left.xo-icon-circle, .fa-pull-left.xo-icon-ticket, .fa-pull-left.xo-icon-telemetry, .fa-pull-left.xo-icon-deploy, .fa-pull-left.xo-icon-trial, .fa-pull-left.xo-icon-resource-set, .fa-pull-left.xo-icon-self-service, .fa-pull-left.xo-icon-delete, .fa-pull-left.xo-icon-iowait, .fa-pull-left.xo-icon-latency, .fa-pull-left.xo-icon-iops, .fa-pull-left.xo-icon-sr, .fa-pull-left.xo-icon-network, .fa-pull-left.xo-icon-disk, .fa-pull-left.xo-icon-memory, .fa-pull-left.xo-icon-vgpu, .fa-pull-left.xo-icon-gpu, .fa-pull-left.xo-icon-cpu, .fa-pull-left.xo-icon-unknown-status, .fa-pull-left.xo-icon-unlock, .fa-pull-left.xo-icon-lock, .fa-pull-left.xo-icon-disconnect, .fa-pull-left.xo-icon-connect, .fa-pull-left.xo-icon-sort, .fa-pull-left.xo-icon-desc, .fa-pull-left.xo-icon-asc, .fa-pull-left.xo-icon-scale, .fa-pull-left.xo-icon-toggle-off, .fa-pull-left.xo-icon-toggle-on, .fa-pull-left.xo-icon-password, .fa-pull-left.xo-icon-hidden, .fa-pull-left.xo-icon-shown, .fa-pull-left.xo-icon-file, .fa-pull-left.xo-icon-ip, .fa-pull-left.xo-icon-ssh-key, .fa-pull-left.xo-icon-force-restart, .fa-pull-left.xo-icon-destroy, .fa-pull-left.xo-icon-forget, .fa-pull-left.xo-icon-freeze, .fa-pull-left.xo-icon-run, .fa-pull-left.xo-icon-summary, .fa-pull-left.xo-icon-settings, .fa-pull-left.xo-icon-search, .fa-pull-left.xo-icon-info, .fa-pull-left.xo-icon-git, .fa-pull-left.xo-icon-shortcuts, .fa-pull-left.xo-icon-upload, .fa-pull-left.xo-icon-download, .fa-pull-left.xo-icon-clipboard, .fa-pull-left.xo-icon-loading, .fa-pull-left.xo-icon-coalesce, .fa-pull-left.xo-icon-caret-up, .fa-pull-left.xo-icon-caret, .fa-pull-left.xo-icon-next, .fa-pull-left.xo-icon-previous, .fa-pull-left.xo-icon-grab, .fa-pull-left.xo-icon-audit, .fa-pull-left.xo-icon-hub-template, .fa-pull-left.xo-icon-hub-recipe, .fa-pull-left.xo-icon-chevron-down, .fa-pull-left.xo-icon-chevron-up, .fa-pull-left.xo-icon-diagnosis, .fa-pull-left.xo-icon-administration, .fa-pull-left.xo-icon-refresh, .fa-pull-left.xo-icon-edit, .fa-pull-left.xo-icon-edition, .fa-pull-left.xo-icon-undo, .fa-pull-left.xo-icon-false, .fa-pull-left.xo-icon-true, .fa-pull-left.xo-icon-success, .fa-pull-left.xo-icon-error, .fa-pull-left.xo-icon-alarm, .fa-pull-left.xo-icon-logs, .fa-pull-left.xo-icon-message, .fa-pull-left.xo-icon-plugin, .fa-pull-left.xo-icon-template, .fa-pull-left.xo-icon-clean-vm, .fa-pull-left.xo-icon-task, .fa-pull-left.xo-icon-remote, .fa-pull-left.xo-icon-proxy, .fa-pull-left.xo-icon-vm, .fa-pull-left.xo-icon-host, .fa-pull-left.xo-icon-pool, .fa-pull-left.xo-icon-pro-support, .fa-pull-left.glyphicon {\n  margin-right: 0.3em;\n}\n.fa.fa-pull-right, .fa-pull-right.xo-icon-fix, .fa-pull-right.xo-icon-restart, .fa-pull-right.xo-icon-xo-cloud-config, .fa-pull-right.xo-icon-open-tunnel, .fa-pull-right.xo-icon-reply, .fa-pull-right.xo-icon-notification, .fa-pull-right.xo-icon-support, .fa-pull-right.xo-icon-plan-trial, .fa-pull-right.xo-icon-plan-upgrade, .fa-pull-right.xo-icon-cancel, .fa-pull-right.xo-icon-add-host, .fa-pull-right.xo-icon-add-vm, .fa-pull-right.xo-icon-add-sr, .fa-pull-right.xo-icon-not-registered, .fa-pull-right.xo-icon-update-ready, .fa-pull-right.xo-icon-update-unknown, .fa-pull-right.xo-icon-upgrade, .fa-pull-right.xo-icon-help, .fa-pull-right.xo-icon-bug, .fa-pull-right.xo-icon-nav, .fa-pull-right.xo-icon-rest-api, .fa-pull-right.xo-icon-windows, .fa-pull-right.xo-icon-ubuntu, .fa-pull-right.xo-icon-suse, .fa-pull-right.xo-icon-solaris, .fa-pull-right.xo-icon-redhat, .fa-pull-right.xo-icon-osx, .fa-pull-right.xo-icon-oracle, .fa-pull-right.xo-icon-netbsd, .fa-pull-right.xo-icon-linux-mint, .fa-pull-right.xo-icon-linux, .fa-pull-right.xo-icon-gentoo, .fa-pull-right.xo-icon-freebsd, .fa-pull-right.xo-icon-fedora, .fa-pull-right.xo-icon-docker, .fa-pull-right.xo-icon-debian, .fa-pull-right.xo-icon-centos, .fa-pull-right.xo-icon-new-network-create, .fa-pull-right.xo-icon-new-vm-remove, .fa-pull-right.xo-icon-new-vm-add, .fa-pull-right.xo-icon-new-vm-reset, .fa-pull-right.xo-icon-new-vm-create, .fa-pull-right.xo-icon-new-vm-summary, .fa-pull-right.xo-icon-new-vm-disks, .fa-pull-right.xo-icon-new-vm-interfaces, .fa-pull-right.xo-icon-new-vm-install-settings, .fa-pull-right.xo-icon-new-vm-perf, .fa-pull-right.xo-icon-new-vm-infos, .fa-pull-right.xo-icon-menu-hub, .fa-pull-right.xo-icon-menu-xostor, .fa-pull-right.xo-icon-menu-new-import, .fa-pull-right.xo-icon-menu-new-network, .fa-pull-right.xo-icon-menu-new-sr, .fa-pull-right.xo-icon-menu-new-vm, .fa-pull-right.xo-icon-menu-new, .fa-pull-right.xo-icon-menu-about, .fa-pull-right.xo-icon-menu-settings-config, .fa-pull-right.xo-icon-menu-settings-logs, .fa-pull-right.xo-icon-menu-settings-plugins, .fa-pull-right.xo-icon-menu-settings-acls, .fa-pull-right.xo-icon-menu-settings-groups, .fa-pull-right.xo-icon-menu-settings-users, .fa-pull-right.xo-icon-menu-settings-servers, .fa-pull-right.xo-icon-menu-settings, .fa-pull-right.xo-icon-menu-support, .fa-pull-right.xo-icon-menu-notification, .fa-pull-right.xo-icon-menu-license, .fa-pull-right.xo-icon-menu-update, .fa-pull-right.xo-icon-menu-xoa, .fa-pull-right.xo-icon-menu-jobs-schedule, .fa-pull-right.xo-icon-menu-jobs-new, .fa-pull-right.xo-icon-menu-jobs-overview, .fa-pull-right.xo-icon-menu-jobs, .fa-pull-right.xo-icon-menu-backup-file-restore, .fa-pull-right.xo-icon-menu-backup-restore, .fa-pull-right.xo-icon-menu-backup-remotes, .fa-pull-right.xo-icon-menu-backup-new, .fa-pull-right.xo-icon-menu-backup-sequence, .fa-pull-right.xo-icon-menu-backup-overview, .fa-pull-right.xo-icon-menu-backup, .fa-pull-right.xo-icon-menu-self-service, .fa-pull-right.xo-icon-menu-dashboard-health, .fa-pull-right.xo-icon-menu-dashboard-stats, .fa-pull-right.xo-icon-menu-dashboard-visualization, .fa-pull-right.xo-icon-menu-dashboard-overview, .fa-pull-right.xo-icon-menu-dashboard, .fa-pull-right.xo-icon-menu-home, .fa-pull-right.xo-icon-menu-collapse, .fa-pull-right.xo-icon-multiline-clipboard, .fa-pull-right.xo-icon-sign-out, .fa-pull-right.xo-icon-group, .fa-pull-right.xo-icon-user, .fa-pull-right.xo-icon-run-schedule, .fa-pull-right.xo-icon-arrow-right, .fa-pull-right.xo-icon-database, .fa-pull-right.xo-icon-time, .fa-pull-right.xo-icon-schedule, .fa-pull-right.xo-icon-export, .fa-pull-right.xo-icon-import, .fa-pull-right.xo-icon-preview, .fa-pull-right.xo-icon-clear-search, .fa-pull-right.xo-icon-plus, .fa-pull-right.xo-icon-minus, .fa-pull-right.xo-icon-rdp, .fa-pull-right.xo-icon-remove, .fa-pull-right.xo-icon-save, .fa-pull-right.xo-icon-reset, .fa-pull-right.xo-icon-add-tag, .fa-pull-right.xo-icon-add, .fa-pull-right.xo-icon-remove-tag, .fa-pull-right.xo-icon-tags, .fa-pull-right.xo-icon-filters, .fa-pull-right.xo-icon-snapshot-current-state, .fa-pull-right.xo-icon-snapshot-delete, .fa-pull-right.xo-icon-snapshot-revert, .fa-pull-right.xo-icon-host-new, .fa-pull-right.xo-icon-vm-new, .fa-pull-right.xo-icon-host-keyboard, .fa-pull-right.xo-icon-vm-keyboard, .fa-pull-right.xo-icon-host-eject, .fa-pull-right.xo-icon-vm-eject, .fa-pull-right.xo-icon-host-reboot, .fa-pull-right.xo-icon-vm-reboot, .fa-pull-right.xo-icon-host-force-reboot, .fa-pull-right.xo-icon-host-stop, .fa-pull-right.xo-icon-vm-stop, .fa-pull-right.xo-icon-host-delete, .fa-pull-right.xo-icon-vm-delete, .fa-pull-right.xo-icon-host-start, .fa-pull-right.xo-icon-vm-start, .fa-pull-right.xo-icon-vif-disable, .fa-pull-right.xo-icon-pool-rolling-reboot, .fa-pull-right.xo-icon-pool-rolling-update, .fa-pull-right.xo-icon-host-patch-update, .fa-pull-right.xo-icon-host-emergency-shutdown, .fa-pull-right.xo-icon-host-restart-agent, .fa-pull-right.xo-icon-host-disable, .fa-pull-right.xo-icon-host-enable, .fa-pull-right.xo-icon-host-forget, .fa-pull-right.xo-icon-host-busy, .fa-pull-right.xo-icon-host-disabled, .fa-pull-right.xo-icon-host-halted, .fa-pull-right.xo-icon-host-running, .fa-pull-right.xo-icon-sr-reclaim-space, .fa-pull-right.xo-icon-vdi-reclaim-space, .fa-pull-right.xo-icon-sr-migrate, .fa-pull-right.xo-icon-vdi-migrate, .fa-pull-right.xo-icon-sr-remove, .fa-pull-right.xo-icon-vdi-remove, .fa-pull-right.xo-icon-sr-forget, .fa-pull-right.xo-icon-vdi-forget, .fa-pull-right.xo-icon-sr-disconnect-all, .fa-pull-right.xo-icon-vdi-disconnect-all, .fa-pull-right.xo-icon-sr-reconnect-all, .fa-pull-right.xo-icon-vdi-reconnect-all, .fa-pull-right.xo-icon-sr-enable, .fa-pull-right.xo-icon-vdi-enable, .fa-pull-right.xo-icon-sr-disable, .fa-pull-right.xo-icon-vdi-disable, .fa-pull-right.xo-icon-task-destroy, .fa-pull-right.xo-icon-task-cancel, .fa-pull-right.xo-icon-disconnected, .fa-pull-right.xo-icon-connected, .fa-pull-right.xo-icon-all-disconnected, .fa-pull-right.xo-icon-some-connected, .fa-pull-right.xo-icon-all-connected, .fa-pull-right.xo-icon-powerState, .fa-pull-right.xo-icon-disabled, .fa-pull-right.xo-icon-busy, .fa-pull-right.xo-icon-unknown, .fa-pull-right.xo-icon-paused, .fa-pull-right.xo-icon-suspended, .fa-pull-right.xo-icon-halted, .fa-pull-right.xo-icon-skipped, .fa-pull-right.xo-icon-running, .fa-pull-right.xo-icon-vm-coalesce-leaf, .fa-pull-right.xo-icon-vm-warm-migration, .fa-pull-right.xo-icon-vm-share, .fa-pull-right.xo-icon-vm-docker, .fa-pull-right.xo-icon-vm-force-shutdown, .fa-pull-right.xo-icon-vm-recovery-mode, .fa-pull-right.xo-icon-vm-force-reboot, .fa-pull-right.xo-icon-vm-pause, .fa-pull-right.xo-icon-vm-suspend, .fa-pull-right.xo-icon-vm-clone, .fa-pull-right.xo-icon-vm-fast-clone, .fa-pull-right.xo-icon-vm-snapshot, .fa-pull-right.xo-icon-vm-migrate, .fa-pull-right.xo-icon-vm-console, .fa-pull-right.xo-icon-vm-copy, .fa-pull-right.xo-icon-vm-create-template, .fa-pull-right.xo-icon-vm-busy, .fa-pull-right.xo-icon-vm-halted, .fa-pull-right.xo-icon-vm-paused, .fa-pull-right.xo-icon-vm-suspended, .fa-pull-right.xo-icon-vm-running, .fa-pull-right.xo-icon-bios-version, .fa-pull-right.xo-icon-total-power, .fa-pull-right.xo-icon-psu, .fa-pull-right.xo-icon-outlet, .fa-pull-right.xo-icon-ipmi, .fa-pull-right.xo-icon-inlet, .fa-pull-right.xo-icon-fan-status, .fa-pull-right.xo-icon-fan-speed, .fa-pull-right.xo-icon-cpu-temperature, .fa-pull-right.xo-icon-migrate-job, .fa-pull-right.xo-icon-jobs, .fa-pull-right.xo-icon-health, .fa-pull-right.xo-icon-folder, .fa-pull-right.xo-icon-files, .fa-pull-right.xo-icon-continuous-replication, .fa-pull-right.xo-icon-disaster-recovery, .fa-pull-right.xo-icon-delta-backup, .fa-pull-right.xo-icon-rolling-snapshot, .fa-pull-right.xo-icon-restore, .fa-pull-right.xo-icon-mirror-backup, .fa-pull-right.xo-icon-check, .fa-pull-right.xo-icon-backup, .fa-pull-right.xo-icon-favorite, .fa-pull-right.xo-icon-api, .fa-pull-right.xo-icon-circle-thin, .fa-pull-right.xo-icon-circle, .fa-pull-right.xo-icon-ticket, .fa-pull-right.xo-icon-telemetry, .fa-pull-right.xo-icon-deploy, .fa-pull-right.xo-icon-trial, .fa-pull-right.xo-icon-resource-set, .fa-pull-right.xo-icon-self-service, .fa-pull-right.xo-icon-delete, .fa-pull-right.xo-icon-iowait, .fa-pull-right.xo-icon-latency, .fa-pull-right.xo-icon-iops, .fa-pull-right.xo-icon-sr, .fa-pull-right.xo-icon-network, .fa-pull-right.xo-icon-disk, .fa-pull-right.xo-icon-memory, .fa-pull-right.xo-icon-vgpu, .fa-pull-right.xo-icon-gpu, .fa-pull-right.xo-icon-cpu, .fa-pull-right.xo-icon-unknown-status, .fa-pull-right.xo-icon-unlock, .fa-pull-right.xo-icon-lock, .fa-pull-right.xo-icon-disconnect, .fa-pull-right.xo-icon-connect, .fa-pull-right.xo-icon-sort, .fa-pull-right.xo-icon-desc, .fa-pull-right.xo-icon-asc, .fa-pull-right.xo-icon-scale, .fa-pull-right.xo-icon-toggle-off, .fa-pull-right.xo-icon-toggle-on, .fa-pull-right.xo-icon-password, .fa-pull-right.xo-icon-hidden, .fa-pull-right.xo-icon-shown, .fa-pull-right.xo-icon-file, .fa-pull-right.xo-icon-ip, .fa-pull-right.xo-icon-ssh-key, .fa-pull-right.xo-icon-force-restart, .fa-pull-right.xo-icon-destroy, .fa-pull-right.xo-icon-forget, .fa-pull-right.xo-icon-freeze, .fa-pull-right.xo-icon-run, .fa-pull-right.xo-icon-summary, .fa-pull-right.xo-icon-settings, .fa-pull-right.xo-icon-search, .fa-pull-right.xo-icon-info, .fa-pull-right.xo-icon-git, .fa-pull-right.xo-icon-shortcuts, .fa-pull-right.xo-icon-upload, .fa-pull-right.xo-icon-download, .fa-pull-right.xo-icon-clipboard, .fa-pull-right.xo-icon-loading, .fa-pull-right.xo-icon-coalesce, .fa-pull-right.xo-icon-caret-up, .fa-pull-right.xo-icon-caret, .fa-pull-right.xo-icon-next, .fa-pull-right.xo-icon-previous, .fa-pull-right.xo-icon-grab, .fa-pull-right.xo-icon-audit, .fa-pull-right.xo-icon-hub-template, .fa-pull-right.xo-icon-hub-recipe, .fa-pull-right.xo-icon-chevron-down, .fa-pull-right.xo-icon-chevron-up, .fa-pull-right.xo-icon-diagnosis, .fa-pull-right.xo-icon-administration, .fa-pull-right.xo-icon-refresh, .fa-pull-right.xo-icon-edit, .fa-pull-right.xo-icon-edition, .fa-pull-right.xo-icon-undo, .fa-pull-right.xo-icon-false, .fa-pull-right.xo-icon-true, .fa-pull-right.xo-icon-success, .fa-pull-right.xo-icon-error, .fa-pull-right.xo-icon-alarm, .fa-pull-right.xo-icon-logs, .fa-pull-right.xo-icon-message, .fa-pull-right.xo-icon-plugin, .fa-pull-right.xo-icon-template, .fa-pull-right.xo-icon-clean-vm, .fa-pull-right.xo-icon-task, .fa-pull-right.xo-icon-remote, .fa-pull-right.xo-icon-proxy, .fa-pull-right.xo-icon-vm, .fa-pull-right.xo-icon-host, .fa-pull-right.xo-icon-pool, .fa-pull-right.xo-icon-pro-support, .fa-pull-right.glyphicon {\n  margin-left: 0.3em;\n}\n\n/* Deprecated as of 4.4.0 */\n.pull-right {\n  float: right;\n}\n\n.pull-left {\n  float: left;\n}\n\n.fa.pull-left, .pull-left.xo-icon-fix, .pull-left.xo-icon-restart, .pull-left.xo-icon-xo-cloud-config, .pull-left.xo-icon-open-tunnel, .pull-left.xo-icon-reply, .pull-left.xo-icon-notification, .pull-left.xo-icon-support, .pull-left.xo-icon-plan-trial, .pull-left.xo-icon-plan-upgrade, .pull-left.xo-icon-cancel, .pull-left.xo-icon-add-host, .pull-left.xo-icon-add-vm, .pull-left.xo-icon-add-sr, .pull-left.xo-icon-not-registered, .pull-left.xo-icon-update-ready, .pull-left.xo-icon-update-unknown, .pull-left.xo-icon-upgrade, .pull-left.xo-icon-help, .pull-left.xo-icon-bug, .pull-left.xo-icon-nav, .pull-left.xo-icon-rest-api, .pull-left.xo-icon-windows, .pull-left.xo-icon-ubuntu, .pull-left.xo-icon-suse, .pull-left.xo-icon-solaris, .pull-left.xo-icon-redhat, .pull-left.xo-icon-osx, .pull-left.xo-icon-oracle, .pull-left.xo-icon-netbsd, .pull-left.xo-icon-linux-mint, .pull-left.xo-icon-linux, .pull-left.xo-icon-gentoo, .pull-left.xo-icon-freebsd, .pull-left.xo-icon-fedora, .pull-left.xo-icon-docker, .pull-left.xo-icon-debian, .pull-left.xo-icon-centos, .pull-left.xo-icon-new-network-create, .pull-left.xo-icon-new-vm-remove, .pull-left.xo-icon-new-vm-add, .pull-left.xo-icon-new-vm-reset, .pull-left.xo-icon-new-vm-create, .pull-left.xo-icon-new-vm-summary, .pull-left.xo-icon-new-vm-disks, .pull-left.xo-icon-new-vm-interfaces, .pull-left.xo-icon-new-vm-install-settings, .pull-left.xo-icon-new-vm-perf, .pull-left.xo-icon-new-vm-infos, .pull-left.xo-icon-menu-hub, .pull-left.xo-icon-menu-xostor, .pull-left.xo-icon-menu-new-import, .pull-left.xo-icon-menu-new-network, .pull-left.xo-icon-menu-new-sr, .pull-left.xo-icon-menu-new-vm, .pull-left.xo-icon-menu-new, .pull-left.xo-icon-menu-about, .pull-left.xo-icon-menu-settings-config, .pull-left.xo-icon-menu-settings-logs, .pull-left.xo-icon-menu-settings-plugins, .pull-left.xo-icon-menu-settings-acls, .pull-left.xo-icon-menu-settings-groups, .pull-left.xo-icon-menu-settings-users, .pull-left.xo-icon-menu-settings-servers, .pull-left.xo-icon-menu-settings, .pull-left.xo-icon-menu-support, .pull-left.xo-icon-menu-notification, .pull-left.xo-icon-menu-license, .pull-left.xo-icon-menu-update, .pull-left.xo-icon-menu-xoa, .pull-left.xo-icon-menu-jobs-schedule, .pull-left.xo-icon-menu-jobs-new, .pull-left.xo-icon-menu-jobs-overview, .pull-left.xo-icon-menu-jobs, .pull-left.xo-icon-menu-backup-file-restore, .pull-left.xo-icon-menu-backup-restore, .pull-left.xo-icon-menu-backup-remotes, .pull-left.xo-icon-menu-backup-new, .pull-left.xo-icon-menu-backup-sequence, .pull-left.xo-icon-menu-backup-overview, .pull-left.xo-icon-menu-backup, .pull-left.xo-icon-menu-self-service, .pull-left.xo-icon-menu-dashboard-health, .pull-left.xo-icon-menu-dashboard-stats, .pull-left.xo-icon-menu-dashboard-visualization, .pull-left.xo-icon-menu-dashboard-overview, .pull-left.xo-icon-menu-dashboard, .pull-left.xo-icon-menu-home, .pull-left.xo-icon-menu-collapse, .pull-left.xo-icon-multiline-clipboard, .pull-left.xo-icon-sign-out, .pull-left.xo-icon-group, .pull-left.xo-icon-user, .pull-left.xo-icon-run-schedule, .pull-left.xo-icon-arrow-right, .pull-left.xo-icon-database, .pull-left.xo-icon-time, .pull-left.xo-icon-schedule, .pull-left.xo-icon-export, .pull-left.xo-icon-import, .pull-left.xo-icon-preview, .pull-left.xo-icon-clear-search, .pull-left.xo-icon-plus, .pull-left.xo-icon-minus, .pull-left.xo-icon-rdp, .pull-left.xo-icon-remove, .pull-left.xo-icon-save, .pull-left.xo-icon-reset, .pull-left.xo-icon-add-tag, .pull-left.xo-icon-add, .pull-left.xo-icon-remove-tag, .pull-left.xo-icon-tags, .pull-left.xo-icon-filters, .pull-left.xo-icon-snapshot-current-state, .pull-left.xo-icon-snapshot-delete, .pull-left.xo-icon-snapshot-revert, .pull-left.xo-icon-host-new, .pull-left.xo-icon-vm-new, .pull-left.xo-icon-host-keyboard, .pull-left.xo-icon-vm-keyboard, .pull-left.xo-icon-host-eject, .pull-left.xo-icon-vm-eject, .pull-left.xo-icon-host-reboot, .pull-left.xo-icon-vm-reboot, .pull-left.xo-icon-host-force-reboot, .pull-left.xo-icon-host-stop, .pull-left.xo-icon-vm-stop, .pull-left.xo-icon-host-delete, .pull-left.xo-icon-vm-delete, .pull-left.xo-icon-host-start, .pull-left.xo-icon-vm-start, .pull-left.xo-icon-vif-disable, .pull-left.xo-icon-pool-rolling-reboot, .pull-left.xo-icon-pool-rolling-update, .pull-left.xo-icon-host-patch-update, .pull-left.xo-icon-host-emergency-shutdown, .pull-left.xo-icon-host-restart-agent, .pull-left.xo-icon-host-disable, .pull-left.xo-icon-host-enable, .pull-left.xo-icon-host-forget, .pull-left.xo-icon-host-busy, .pull-left.xo-icon-host-disabled, .pull-left.xo-icon-host-halted, .pull-left.xo-icon-host-running, .pull-left.xo-icon-sr-reclaim-space, .pull-left.xo-icon-vdi-reclaim-space, .pull-left.xo-icon-sr-migrate, .pull-left.xo-icon-vdi-migrate, .pull-left.xo-icon-sr-remove, .pull-left.xo-icon-vdi-remove, .pull-left.xo-icon-sr-forget, .pull-left.xo-icon-vdi-forget, .pull-left.xo-icon-sr-disconnect-all, .pull-left.xo-icon-vdi-disconnect-all, .pull-left.xo-icon-sr-reconnect-all, .pull-left.xo-icon-vdi-reconnect-all, .pull-left.xo-icon-sr-enable, .pull-left.xo-icon-vdi-enable, .pull-left.xo-icon-sr-disable, .pull-left.xo-icon-vdi-disable, .pull-left.xo-icon-task-destroy, .pull-left.xo-icon-task-cancel, .pull-left.xo-icon-disconnected, .pull-left.xo-icon-connected, .pull-left.xo-icon-all-disconnected, .pull-left.xo-icon-some-connected, .pull-left.xo-icon-all-connected, .pull-left.xo-icon-powerState, .pull-left.xo-icon-disabled, .pull-left.xo-icon-busy, .pull-left.xo-icon-unknown, .pull-left.xo-icon-paused, .pull-left.xo-icon-suspended, .pull-left.xo-icon-halted, .pull-left.xo-icon-skipped, .pull-left.xo-icon-running, .pull-left.xo-icon-vm-coalesce-leaf, .pull-left.xo-icon-vm-warm-migration, .pull-left.xo-icon-vm-share, .pull-left.xo-icon-vm-docker, .pull-left.xo-icon-vm-force-shutdown, .pull-left.xo-icon-vm-recovery-mode, .pull-left.xo-icon-vm-force-reboot, .pull-left.xo-icon-vm-pause, .pull-left.xo-icon-vm-suspend, .pull-left.xo-icon-vm-clone, .pull-left.xo-icon-vm-fast-clone, .pull-left.xo-icon-vm-snapshot, .pull-left.xo-icon-vm-migrate, .pull-left.xo-icon-vm-console, .pull-left.xo-icon-vm-copy, .pull-left.xo-icon-vm-create-template, .pull-left.xo-icon-vm-busy, .pull-left.xo-icon-vm-halted, .pull-left.xo-icon-vm-paused, .pull-left.xo-icon-vm-suspended, .pull-left.xo-icon-vm-running, .pull-left.xo-icon-bios-version, .pull-left.xo-icon-total-power, .pull-left.xo-icon-psu, .pull-left.xo-icon-outlet, .pull-left.xo-icon-ipmi, .pull-left.xo-icon-inlet, .pull-left.xo-icon-fan-status, .pull-left.xo-icon-fan-speed, .pull-left.xo-icon-cpu-temperature, .pull-left.xo-icon-migrate-job, .pull-left.xo-icon-jobs, .pull-left.xo-icon-health, .pull-left.xo-icon-folder, .pull-left.xo-icon-files, .pull-left.xo-icon-continuous-replication, .pull-left.xo-icon-disaster-recovery, .pull-left.xo-icon-delta-backup, .pull-left.xo-icon-rolling-snapshot, .pull-left.xo-icon-restore, .pull-left.xo-icon-mirror-backup, .pull-left.xo-icon-check, .pull-left.xo-icon-backup, .pull-left.xo-icon-favorite, .pull-left.xo-icon-api, .pull-left.xo-icon-circle-thin, .pull-left.xo-icon-circle, .pull-left.xo-icon-ticket, .pull-left.xo-icon-telemetry, .pull-left.xo-icon-deploy, .pull-left.xo-icon-trial, .pull-left.xo-icon-resource-set, .pull-left.xo-icon-self-service, .pull-left.xo-icon-delete, .pull-left.xo-icon-iowait, .pull-left.xo-icon-latency, .pull-left.xo-icon-iops, .pull-left.xo-icon-sr, .pull-left.xo-icon-network, .pull-left.xo-icon-disk, .pull-left.xo-icon-memory, .pull-left.xo-icon-vgpu, .pull-left.xo-icon-gpu, .pull-left.xo-icon-cpu, .pull-left.xo-icon-unknown-status, .pull-left.xo-icon-unlock, .pull-left.xo-icon-lock, .pull-left.xo-icon-disconnect, .pull-left.xo-icon-connect, .pull-left.xo-icon-sort, .pull-left.xo-icon-desc, .pull-left.xo-icon-asc, .pull-left.xo-icon-scale, .pull-left.xo-icon-toggle-off, .pull-left.xo-icon-toggle-on, .pull-left.xo-icon-password, .pull-left.xo-icon-hidden, .pull-left.xo-icon-shown, .pull-left.xo-icon-file, .pull-left.xo-icon-ip, .pull-left.xo-icon-ssh-key, .pull-left.xo-icon-force-restart, .pull-left.xo-icon-destroy, .pull-left.xo-icon-forget, .pull-left.xo-icon-freeze, .pull-left.xo-icon-run, .pull-left.xo-icon-summary, .pull-left.xo-icon-settings, .pull-left.xo-icon-search, .pull-left.xo-icon-info, .pull-left.xo-icon-git, .pull-left.xo-icon-shortcuts, .pull-left.xo-icon-upload, .pull-left.xo-icon-download, .pull-left.xo-icon-clipboard, .pull-left.xo-icon-loading, .pull-left.xo-icon-coalesce, .pull-left.xo-icon-caret-up, .pull-left.xo-icon-caret, .pull-left.xo-icon-next, .pull-left.xo-icon-previous, .pull-left.xo-icon-grab, .pull-left.xo-icon-audit, .pull-left.xo-icon-hub-template, .pull-left.xo-icon-hub-recipe, .pull-left.xo-icon-chevron-down, .pull-left.xo-icon-chevron-up, .pull-left.xo-icon-diagnosis, .pull-left.xo-icon-administration, .pull-left.xo-icon-refresh, .pull-left.xo-icon-edit, .pull-left.xo-icon-edition, .pull-left.xo-icon-undo, .pull-left.xo-icon-false, .pull-left.xo-icon-true, .pull-left.xo-icon-success, .pull-left.xo-icon-error, .pull-left.xo-icon-alarm, .pull-left.xo-icon-logs, .pull-left.xo-icon-message, .pull-left.xo-icon-plugin, .pull-left.xo-icon-template, .pull-left.xo-icon-clean-vm, .pull-left.xo-icon-task, .pull-left.xo-icon-remote, .pull-left.xo-icon-proxy, .pull-left.xo-icon-vm, .pull-left.xo-icon-host, .pull-left.xo-icon-pool, .pull-left.xo-icon-pro-support, .pull-left.glyphicon {\n  margin-right: 0.3em;\n}\n.fa.pull-right, .pull-right.xo-icon-fix, .pull-right.xo-icon-restart, .pull-right.xo-icon-xo-cloud-config, .pull-right.xo-icon-open-tunnel, .pull-right.xo-icon-reply, .pull-right.xo-icon-notification, .pull-right.xo-icon-support, .pull-right.xo-icon-plan-trial, .pull-right.xo-icon-plan-upgrade, .pull-right.xo-icon-cancel, .pull-right.xo-icon-add-host, .pull-right.xo-icon-add-vm, .pull-right.xo-icon-add-sr, .pull-right.xo-icon-not-registered, .pull-right.xo-icon-update-ready, .pull-right.xo-icon-update-unknown, .pull-right.xo-icon-upgrade, .pull-right.xo-icon-help, .pull-right.xo-icon-bug, .pull-right.xo-icon-nav, .pull-right.xo-icon-rest-api, .pull-right.xo-icon-windows, .pull-right.xo-icon-ubuntu, .pull-right.xo-icon-suse, .pull-right.xo-icon-solaris, .pull-right.xo-icon-redhat, .pull-right.xo-icon-osx, .pull-right.xo-icon-oracle, .pull-right.xo-icon-netbsd, .pull-right.xo-icon-linux-mint, .pull-right.xo-icon-linux, .pull-right.xo-icon-gentoo, .pull-right.xo-icon-freebsd, .pull-right.xo-icon-fedora, .pull-right.xo-icon-docker, .pull-right.xo-icon-debian, .pull-right.xo-icon-centos, .pull-right.xo-icon-new-network-create, .pull-right.xo-icon-new-vm-remove, .pull-right.xo-icon-new-vm-add, .pull-right.xo-icon-new-vm-reset, .pull-right.xo-icon-new-vm-create, .pull-right.xo-icon-new-vm-summary, .pull-right.xo-icon-new-vm-disks, .pull-right.xo-icon-new-vm-interfaces, .pull-right.xo-icon-new-vm-install-settings, .pull-right.xo-icon-new-vm-perf, .pull-right.xo-icon-new-vm-infos, .pull-right.xo-icon-menu-hub, .pull-right.xo-icon-menu-xostor, .pull-right.xo-icon-menu-new-import, .pull-right.xo-icon-menu-new-network, .pull-right.xo-icon-menu-new-sr, .pull-right.xo-icon-menu-new-vm, .pull-right.xo-icon-menu-new, .pull-right.xo-icon-menu-about, .pull-right.xo-icon-menu-settings-config, .pull-right.xo-icon-menu-settings-logs, .pull-right.xo-icon-menu-settings-plugins, .pull-right.xo-icon-menu-settings-acls, .pull-right.xo-icon-menu-settings-groups, .pull-right.xo-icon-menu-settings-users, .pull-right.xo-icon-menu-settings-servers, .pull-right.xo-icon-menu-settings, .pull-right.xo-icon-menu-support, .pull-right.xo-icon-menu-notification, .pull-right.xo-icon-menu-license, .pull-right.xo-icon-menu-update, .pull-right.xo-icon-menu-xoa, .pull-right.xo-icon-menu-jobs-schedule, .pull-right.xo-icon-menu-jobs-new, .pull-right.xo-icon-menu-jobs-overview, .pull-right.xo-icon-menu-jobs, .pull-right.xo-icon-menu-backup-file-restore, .pull-right.xo-icon-menu-backup-restore, .pull-right.xo-icon-menu-backup-remotes, .pull-right.xo-icon-menu-backup-new, .pull-right.xo-icon-menu-backup-sequence, .pull-right.xo-icon-menu-backup-overview, .pull-right.xo-icon-menu-backup, .pull-right.xo-icon-menu-self-service, .pull-right.xo-icon-menu-dashboard-health, .pull-right.xo-icon-menu-dashboard-stats, .pull-right.xo-icon-menu-dashboard-visualization, .pull-right.xo-icon-menu-dashboard-overview, .pull-right.xo-icon-menu-dashboard, .pull-right.xo-icon-menu-home, .pull-right.xo-icon-menu-collapse, .pull-right.xo-icon-multiline-clipboard, .pull-right.xo-icon-sign-out, .pull-right.xo-icon-group, .pull-right.xo-icon-user, .pull-right.xo-icon-run-schedule, .pull-right.xo-icon-arrow-right, .pull-right.xo-icon-database, .pull-right.xo-icon-time, .pull-right.xo-icon-schedule, .pull-right.xo-icon-export, .pull-right.xo-icon-import, .pull-right.xo-icon-preview, .pull-right.xo-icon-clear-search, .pull-right.xo-icon-plus, .pull-right.xo-icon-minus, .pull-right.xo-icon-rdp, .pull-right.xo-icon-remove, .pull-right.xo-icon-save, .pull-right.xo-icon-reset, .pull-right.xo-icon-add-tag, .pull-right.xo-icon-add, .pull-right.xo-icon-remove-tag, .pull-right.xo-icon-tags, .pull-right.xo-icon-filters, .pull-right.xo-icon-snapshot-current-state, .pull-right.xo-icon-snapshot-delete, .pull-right.xo-icon-snapshot-revert, .pull-right.xo-icon-host-new, .pull-right.xo-icon-vm-new, .pull-right.xo-icon-host-keyboard, .pull-right.xo-icon-vm-keyboard, .pull-right.xo-icon-host-eject, .pull-right.xo-icon-vm-eject, .pull-right.xo-icon-host-reboot, .pull-right.xo-icon-vm-reboot, .pull-right.xo-icon-host-force-reboot, .pull-right.xo-icon-host-stop, .pull-right.xo-icon-vm-stop, .pull-right.xo-icon-host-delete, .pull-right.xo-icon-vm-delete, .pull-right.xo-icon-host-start, .pull-right.xo-icon-vm-start, .pull-right.xo-icon-vif-disable, .pull-right.xo-icon-pool-rolling-reboot, .pull-right.xo-icon-pool-rolling-update, .pull-right.xo-icon-host-patch-update, .pull-right.xo-icon-host-emergency-shutdown, .pull-right.xo-icon-host-restart-agent, .pull-right.xo-icon-host-disable, .pull-right.xo-icon-host-enable, .pull-right.xo-icon-host-forget, .pull-right.xo-icon-host-busy, .pull-right.xo-icon-host-disabled, .pull-right.xo-icon-host-halted, .pull-right.xo-icon-host-running, .pull-right.xo-icon-sr-reclaim-space, .pull-right.xo-icon-vdi-reclaim-space, .pull-right.xo-icon-sr-migrate, .pull-right.xo-icon-vdi-migrate, .pull-right.xo-icon-sr-remove, .pull-right.xo-icon-vdi-remove, .pull-right.xo-icon-sr-forget, .pull-right.xo-icon-vdi-forget, .pull-right.xo-icon-sr-disconnect-all, .pull-right.xo-icon-vdi-disconnect-all, .pull-right.xo-icon-sr-reconnect-all, .pull-right.xo-icon-vdi-reconnect-all, .pull-right.xo-icon-sr-enable, .pull-right.xo-icon-vdi-enable, .pull-right.xo-icon-sr-disable, .pull-right.xo-icon-vdi-disable, .pull-right.xo-icon-task-destroy, .pull-right.xo-icon-task-cancel, .pull-right.xo-icon-disconnected, .pull-right.xo-icon-connected, .pull-right.xo-icon-all-disconnected, .pull-right.xo-icon-some-connected, .pull-right.xo-icon-all-connected, .pull-right.xo-icon-powerState, .pull-right.xo-icon-disabled, .pull-right.xo-icon-busy, .pull-right.xo-icon-unknown, .pull-right.xo-icon-paused, .pull-right.xo-icon-suspended, .pull-right.xo-icon-halted, .pull-right.xo-icon-skipped, .pull-right.xo-icon-running, .pull-right.xo-icon-vm-coalesce-leaf, .pull-right.xo-icon-vm-warm-migration, .pull-right.xo-icon-vm-share, .pull-right.xo-icon-vm-docker, .pull-right.xo-icon-vm-force-shutdown, .pull-right.xo-icon-vm-recovery-mode, .pull-right.xo-icon-vm-force-reboot, .pull-right.xo-icon-vm-pause, .pull-right.xo-icon-vm-suspend, .pull-right.xo-icon-vm-clone, .pull-right.xo-icon-vm-fast-clone, .pull-right.xo-icon-vm-snapshot, .pull-right.xo-icon-vm-migrate, .pull-right.xo-icon-vm-console, .pull-right.xo-icon-vm-copy, .pull-right.xo-icon-vm-create-template, .pull-right.xo-icon-vm-busy, .pull-right.xo-icon-vm-halted, .pull-right.xo-icon-vm-paused, .pull-right.xo-icon-vm-suspended, .pull-right.xo-icon-vm-running, .pull-right.xo-icon-bios-version, .pull-right.xo-icon-total-power, .pull-right.xo-icon-psu, .pull-right.xo-icon-outlet, .pull-right.xo-icon-ipmi, .pull-right.xo-icon-inlet, .pull-right.xo-icon-fan-status, .pull-right.xo-icon-fan-speed, .pull-right.xo-icon-cpu-temperature, .pull-right.xo-icon-migrate-job, .pull-right.xo-icon-jobs, .pull-right.xo-icon-health, .pull-right.xo-icon-folder, .pull-right.xo-icon-files, .pull-right.xo-icon-continuous-replication, .pull-right.xo-icon-disaster-recovery, .pull-right.xo-icon-delta-backup, .pull-right.xo-icon-rolling-snapshot, .pull-right.xo-icon-restore, .pull-right.xo-icon-mirror-backup, .pull-right.xo-icon-check, .pull-right.xo-icon-backup, .pull-right.xo-icon-favorite, .pull-right.xo-icon-api, .pull-right.xo-icon-circle-thin, .pull-right.xo-icon-circle, .pull-right.xo-icon-ticket, .pull-right.xo-icon-telemetry, .pull-right.xo-icon-deploy, .pull-right.xo-icon-trial, .pull-right.xo-icon-resource-set, .pull-right.xo-icon-self-service, .pull-right.xo-icon-delete, .pull-right.xo-icon-iowait, .pull-right.xo-icon-latency, .pull-right.xo-icon-iops, .pull-right.xo-icon-sr, .pull-right.xo-icon-network, .pull-right.xo-icon-disk, .pull-right.xo-icon-memory, .pull-right.xo-icon-vgpu, .pull-right.xo-icon-gpu, .pull-right.xo-icon-cpu, .pull-right.xo-icon-unknown-status, .pull-right.xo-icon-unlock, .pull-right.xo-icon-lock, .pull-right.xo-icon-disconnect, .pull-right.xo-icon-connect, .pull-right.xo-icon-sort, .pull-right.xo-icon-desc, .pull-right.xo-icon-asc, .pull-right.xo-icon-scale, .pull-right.xo-icon-toggle-off, .pull-right.xo-icon-toggle-on, .pull-right.xo-icon-password, .pull-right.xo-icon-hidden, .pull-right.xo-icon-shown, .pull-right.xo-icon-file, .pull-right.xo-icon-ip, .pull-right.xo-icon-ssh-key, .pull-right.xo-icon-force-restart, .pull-right.xo-icon-destroy, .pull-right.xo-icon-forget, .pull-right.xo-icon-freeze, .pull-right.xo-icon-run, .pull-right.xo-icon-summary, .pull-right.xo-icon-settings, .pull-right.xo-icon-search, .pull-right.xo-icon-info, .pull-right.xo-icon-git, .pull-right.xo-icon-shortcuts, .pull-right.xo-icon-upload, .pull-right.xo-icon-download, .pull-right.xo-icon-clipboard, .pull-right.xo-icon-loading, .pull-right.xo-icon-coalesce, .pull-right.xo-icon-caret-up, .pull-right.xo-icon-caret, .pull-right.xo-icon-next, .pull-right.xo-icon-previous, .pull-right.xo-icon-grab, .pull-right.xo-icon-audit, .pull-right.xo-icon-hub-template, .pull-right.xo-icon-hub-recipe, .pull-right.xo-icon-chevron-down, .pull-right.xo-icon-chevron-up, .pull-right.xo-icon-diagnosis, .pull-right.xo-icon-administration, .pull-right.xo-icon-refresh, .pull-right.xo-icon-edit, .pull-right.xo-icon-edition, .pull-right.xo-icon-undo, .pull-right.xo-icon-false, .pull-right.xo-icon-true, .pull-right.xo-icon-success, .pull-right.xo-icon-error, .pull-right.xo-icon-alarm, .pull-right.xo-icon-logs, .pull-right.xo-icon-message, .pull-right.xo-icon-plugin, .pull-right.xo-icon-template, .pull-right.xo-icon-clean-vm, .pull-right.xo-icon-task, .pull-right.xo-icon-remote, .pull-right.xo-icon-proxy, .pull-right.xo-icon-vm, .pull-right.xo-icon-host, .pull-right.xo-icon-pool, .pull-right.xo-icon-pro-support, .pull-right.glyphicon {\n  margin-left: 0.3em;\n}\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n  animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse, .xo-icon-loading {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n  animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  filter: none;\n}\n\n.fa-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n\n.fa-stack-1x, .fa-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n\n.fa-stack-1x {\n  line-height: inherit;\n}\n\n.fa-stack-2x {\n  font-size: 2em;\n}\n\n.fa-inverse {\n  color: #fff;\n}\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n.fa-glass:before {\n  content: \"\\f000\";\n}\n\n.fa-music:before {\n  content: \"\\f001\";\n}\n\n.fa-search:before, .xo-icon-search:before {\n  content: \"\\f002\";\n}\n\n.fa-envelope-o:before, .xo-icon-message:before {\n  content: \"\\f003\";\n}\n\n.fa-heart:before {\n  content: \"\\f004\";\n}\n\n.fa-star:before, .xo-icon-plan-trial:before, .xo-icon-favorite:before {\n  content: \"\\f005\";\n}\n\n.fa-star-o:before {\n  content: \"\\f006\";\n}\n\n.fa-user:before, .xo-icon-menu-settings-users:before, .xo-icon-user:before {\n  content: \"\\f007\";\n}\n\n.fa-film:before {\n  content: \"\\f008\";\n}\n\n.fa-th-large:before {\n  content: \"\\f009\";\n}\n\n.fa-th:before {\n  content: \"\\f00a\";\n}\n\n.fa-th-list:before {\n  content: \"\\f00b\";\n}\n\n.fa-check:before, .xo-icon-snapshot-current-state:before, .xo-icon-check:before, .xo-icon-true:before, .xo-icon-success:before {\n  content: \"\\f00c\";\n}\n\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before,\n.xo-icon-new-vm-remove:before,\n.xo-icon-remove:before,\n.xo-icon-remove-tag:before,\n.xo-icon-vif-disable:before,\n.xo-icon-false:before {\n  content: \"\\f00d\";\n}\n\n.fa-search-plus:before {\n  content: \"\\f00e\";\n}\n\n.fa-search-minus:before {\n  content: \"\\f010\";\n}\n\n.fa-power-off:before, .xo-icon-sr-disconnect-all:before, .xo-icon-vdi-disconnect-all:before, .xo-icon-powerState:before, .xo-icon-vm-suspend:before {\n  content: \"\\f011\";\n}\n\n.fa-signal:before {\n  content: \"\\f012\";\n}\n\n.fa-gear:before,\n.fa-cog:before,\n.xo-icon-upgrade:before,\n.xo-icon-menu-settings:before,\n.xo-icon-settings:before,\n.xo-icon-coalesce:before {\n  content: \"\\f013\";\n}\n\n.fa-trash-o:before {\n  content: \"\\f014\";\n}\n\n.fa-home:before, .xo-icon-menu-home:before {\n  content: \"\\f015\";\n}\n\n.fa-file-o:before, .xo-icon-menu-settings-config:before, .xo-icon-menu-backup-file-restore:before, .xo-icon-file:before {\n  content: \"\\f016\";\n}\n\n.fa-clock-o:before, .xo-icon-menu-jobs-schedule:before, .xo-icon-time:before, .xo-icon-schedule:before, .xo-icon-latency:before {\n  content: \"\\f017\";\n}\n\n.fa-road:before {\n  content: \"\\f018\";\n}\n\n.fa-download:before, .xo-icon-new-vm-install-settings:before, .xo-icon-export:before, .xo-icon-host-patch-update:before, .xo-icon-backup:before, .xo-icon-download:before {\n  content: \"\\f019\";\n}\n\n.fa-arrow-circle-o-down:before {\n  content: \"\\f01a\";\n}\n\n.fa-arrow-circle-o-up:before {\n  content: \"\\f01b\";\n}\n\n.fa-inbox:before {\n  content: \"\\f01c\";\n}\n\n.fa-play-circle-o:before {\n  content: \"\\f01d\";\n}\n\n.fa-rotate-right:before,\n.fa-repeat:before {\n  content: \"\\f01e\";\n}\n\n.fa-refresh:before, .xo-icon-restart:before, .xo-icon-menu-update:before, .xo-icon-snapshot-revert:before, .xo-icon-host-reboot:before, .xo-icon-vm-reboot:before, .xo-icon-refresh:before {\n  content: \"\\f021\";\n}\n\n.fa-list-alt:before, .xo-icon-vm-share:before, .xo-icon-resource-set:before, .xo-icon-audit:before {\n  content: \"\\f022\";\n}\n\n.fa-lock:before, .xo-icon-lock:before {\n  content: \"\\f023\";\n}\n\n.fa-flag:before {\n  content: \"\\f024\";\n}\n\n.fa-headphones:before {\n  content: \"\\f025\";\n}\n\n.fa-volume-off:before {\n  content: \"\\f026\";\n}\n\n.fa-volume-down:before {\n  content: \"\\f027\";\n}\n\n.fa-volume-up:before {\n  content: \"\\f028\";\n}\n\n.fa-qrcode:before {\n  content: \"\\f029\";\n}\n\n.fa-barcode:before {\n  content: \"\\f02a\";\n}\n\n.fa-tag:before {\n  content: \"\\f02b\";\n}\n\n.fa-tags:before, .xo-icon-tags:before {\n  content: \"\\f02c\";\n}\n\n.fa-book:before {\n  content: \"\\f02d\";\n}\n\n.fa-bookmark:before {\n  content: \"\\f02e\";\n}\n\n.fa-print:before {\n  content: \"\\f02f\";\n}\n\n.fa-camera:before, .xo-icon-vm-snapshot:before, .xo-icon-rolling-snapshot:before {\n  content: \"\\f030\";\n}\n\n.fa-font:before {\n  content: \"\\f031\";\n}\n\n.fa-bold:before {\n  content: \"\\f032\";\n}\n\n.fa-italic:before {\n  content: \"\\f033\";\n}\n\n.fa-text-height:before {\n  content: \"\\f034\";\n}\n\n.fa-text-width:before {\n  content: \"\\f035\";\n}\n\n.fa-align-left:before {\n  content: \"\\f036\";\n}\n\n.fa-align-center:before {\n  content: \"\\f037\";\n}\n\n.fa-align-right:before {\n  content: \"\\f038\";\n}\n\n.fa-align-justify:before {\n  content: \"\\f039\";\n}\n\n.fa-list:before, .xo-icon-menu-settings-logs:before, .xo-icon-logs:before {\n  content: \"\\f03a\";\n}\n\n.fa-dedent:before,\n.fa-outdent:before {\n  content: \"\\f03b\";\n}\n\n.fa-indent:before {\n  content: \"\\f03c\";\n}\n\n.fa-video-camera:before {\n  content: \"\\f03d\";\n}\n\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n  content: \"\\f03e\";\n}\n\n.fa-pencil:before, .xo-icon-edit:before {\n  content: \"\\f040\";\n}\n\n.fa-map-marker:before, .xo-icon-ip:before {\n  content: \"\\f041\";\n}\n\n.fa-adjust:before {\n  content: \"\\f042\";\n}\n\n.fa-tint:before {\n  content: \"\\f043\";\n}\n\n.fa-edit:before,\n.fa-pencil-square-o:before,\n.xo-icon-edition:before {\n  content: \"\\f044\";\n}\n\n.fa-share-square-o:before {\n  content: \"\\f045\";\n}\n\n.fa-check-square-o:before {\n  content: \"\\f046\";\n}\n\n.fa-arrows:before {\n  content: \"\\f047\";\n}\n\n.fa-step-backward:before {\n  content: \"\\f048\";\n}\n\n.fa-fast-backward:before {\n  content: \"\\f049\";\n}\n\n.fa-backward:before {\n  content: \"\\f04a\";\n}\n\n.fa-play:before, .xo-icon-new-network-create:before, .xo-icon-new-vm-create:before, .xo-icon-run-schedule:before, .xo-icon-host-start:before, .xo-icon-vm-start:before, .xo-icon-run:before {\n  content: \"\\f04b\";\n}\n\n.fa-pause:before, .xo-icon-vm-pause:before, .xo-icon-iowait:before {\n  content: \"\\f04c\";\n}\n\n.fa-stop:before, .xo-icon-host-stop:before, .xo-icon-vm-stop:before {\n  content: \"\\f04d\";\n}\n\n.fa-forward:before, .xo-icon-vm-recovery-mode:before, .xo-icon-force-restart:before {\n  content: \"\\f04e\";\n}\n\n.fa-fast-forward:before {\n  content: \"\\f050\";\n}\n\n.fa-step-forward:before {\n  content: \"\\f051\";\n}\n\n.fa-eject:before, .xo-icon-host-eject:before, .xo-icon-vm-eject:before {\n  content: \"\\f052\";\n}\n\n.fa-chevron-left:before, .xo-icon-previous:before {\n  content: \"\\f053\";\n}\n\n.fa-chevron-right:before, .xo-icon-next:before {\n  content: \"\\f054\";\n}\n\n.fa-plus-circle:before {\n  content: \"\\f055\";\n}\n\n.fa-minus-circle:before {\n  content: \"\\f056\";\n}\n\n.fa-times-circle:before, .xo-icon-clear-search:before, .xo-icon-host-disable:before, .xo-icon-sr-disable:before, .xo-icon-vdi-disable:before {\n  content: \"\\f057\";\n}\n\n.fa-check-circle:before, .xo-icon-host-enable:before {\n  content: \"\\f058\";\n}\n\n.fa-question-circle:before, .xo-icon-update-unknown:before, .xo-icon-unknown-status:before {\n  content: \"\\f059\";\n}\n\n.fa-info-circle:before, .xo-icon-new-vm-infos:before, .xo-icon-info:before {\n  content: \"\\f05a\";\n}\n\n.fa-crosshairs:before {\n  content: \"\\f05b\";\n}\n\n.fa-times-circle-o:before {\n  content: \"\\f05c\";\n}\n\n.fa-check-circle-o:before {\n  content: \"\\f05d\";\n}\n\n.fa-ban:before, .xo-icon-cancel:before, .xo-icon-host-forget:before, .xo-icon-sr-forget:before, .xo-icon-vdi-forget:before, .xo-icon-task-cancel:before, .xo-icon-forget:before {\n  content: \"\\f05e\";\n}\n\n.fa-arrow-left:before {\n  content: \"\\f060\";\n}\n\n.fa-arrow-right:before, .xo-icon-arrow-right:before {\n  content: \"\\f061\";\n}\n\n.fa-arrow-up:before, .xo-icon-desc:before {\n  content: \"\\f062\";\n}\n\n.fa-arrow-down:before, .xo-icon-asc:before {\n  content: \"\\f063\";\n}\n\n.fa-mail-forward:before,\n.fa-share:before,\n.xo-icon-reply:before,\n.xo-icon-sr-migrate:before,\n.xo-icon-vdi-migrate:before,\n.xo-icon-vm-migrate:before,\n.xo-icon-migrate-job:before {\n  content: \"\\f064\";\n}\n\n.fa-expand:before {\n  content: \"\\f065\";\n}\n\n.fa-compress:before, .xo-icon-vm-coalesce-leaf:before {\n  content: \"\\f066\";\n}\n\n.fa-plus:before, .xo-icon-new-vm-add:before, .xo-icon-menu-new:before, .xo-icon-menu-jobs-new:before, .xo-icon-menu-backup-new:before, .xo-icon-plus:before, .xo-icon-add-tag:before, .xo-icon-add:before, .xo-icon-host-new:before, .xo-icon-vm-new:before {\n  content: \"\\f067\";\n}\n\n.fa-minus:before, .xo-icon-minus:before {\n  content: \"\\f068\";\n}\n\n.fa-asterisk:before {\n  content: \"\\f069\";\n}\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\";\n}\n\n.fa-gift:before {\n  content: \"\\f06b\";\n}\n\n.fa-leaf:before {\n  content: \"\\f06c\";\n}\n\n.fa-fire:before, .xo-icon-vm-warm-migration:before {\n  content: \"\\f06d\";\n}\n\n.fa-eye:before, .xo-icon-menu-jobs-overview:before, .xo-icon-menu-backup-overview:before, .xo-icon-menu-dashboard-overview:before, .xo-icon-preview:before, .xo-icon-shown:before {\n  content: \"\\f06e\";\n}\n\n.fa-eye-slash:before, .xo-icon-hidden:before {\n  content: \"\\f070\";\n}\n\n.fa-warning:before,\n.fa-exclamation-triangle:before,\n.xo-icon-host-emergency-shutdown:before,\n.xo-icon-error:before,\n.xo-icon-alarm:before {\n  content: \"\\f071\";\n}\n\n.fa-plane:before {\n  content: \"\\f072\";\n}\n\n.fa-calendar:before {\n  content: \"\\f073\";\n}\n\n.fa-random:before {\n  content: \"\\f074\";\n}\n\n.fa-comment:before {\n  content: \"\\f075\";\n}\n\n.fa-magnet:before {\n  content: \"\\f076\";\n}\n\n.fa-chevron-up:before, .xo-icon-chevron-up:before {\n  content: \"\\f077\";\n}\n\n.fa-chevron-down:before, .xo-icon-chevron-down:before {\n  content: \"\\f078\";\n}\n\n.fa-retweet:before, .xo-icon-host-restart-agent:before, .xo-icon-sr-reconnect-all:before, .xo-icon-vdi-reconnect-all:before {\n  content: \"\\f079\";\n}\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\";\n}\n\n.fa-folder:before, .xo-icon-folder:before {\n  content: \"\\f07b\";\n}\n\n.fa-folder-open:before {\n  content: \"\\f07c\";\n}\n\n.fa-arrows-v:before {\n  content: \"\\f07d\";\n}\n\n.fa-arrows-h:before, .xo-icon-open-tunnel:before {\n  content: \"\\f07e\";\n}\n\n.fa-bar-chart-o:before,\n.fa-bar-chart:before,\n.xo-icon-menu-dashboard-stats:before {\n  content: \"\\f080\";\n}\n\n.fa-twitter-square:before {\n  content: \"\\f081\";\n}\n\n.fa-facebook-square:before {\n  content: \"\\f082\";\n}\n\n.fa-camera-retro:before {\n  content: \"\\f083\";\n}\n\n.fa-key:before, .xo-icon-menu-settings-acls:before, .xo-icon-password:before, .xo-icon-ssh-key:before {\n  content: \"\\f084\";\n}\n\n.fa-gears:before,\n.fa-cogs:before,\n.xo-icon-menu-jobs:before,\n.xo-icon-jobs:before,\n.xo-icon-iops:before {\n  content: \"\\f085\";\n}\n\n.fa-comments:before {\n  content: \"\\f086\";\n}\n\n.fa-thumbs-o-up:before {\n  content: \"\\f087\";\n}\n\n.fa-thumbs-o-down:before {\n  content: \"\\f088\";\n}\n\n.fa-star-half:before {\n  content: \"\\f089\";\n}\n\n.fa-heart-o:before {\n  content: \"\\f08a\";\n}\n\n.fa-sign-out:before, .xo-icon-sign-out:before, .xo-icon-outlet:before {\n  content: \"\\f08b\";\n}\n\n.fa-linkedin-square:before {\n  content: \"\\f08c\";\n}\n\n.fa-thumb-tack:before, .xo-icon-vm-create-template:before, .xo-icon-template:before {\n  content: \"\\f08d\";\n}\n\n.fa-external-link:before {\n  content: \"\\f08e\";\n}\n\n.fa-sign-in:before, .xo-icon-inlet:before {\n  content: \"\\f090\";\n}\n\n.fa-trophy:before {\n  content: \"\\f091\";\n}\n\n.fa-github-square:before {\n  content: \"\\f092\";\n}\n\n.fa-upload:before, .xo-icon-menu-backup-restore:before, .xo-icon-restore:before, .xo-icon-upload:before {\n  content: \"\\f093\";\n}\n\n.fa-lemon-o:before {\n  content: \"\\f094\";\n}\n\n.fa-phone:before {\n  content: \"\\f095\";\n}\n\n.fa-square-o:before {\n  content: \"\\f096\";\n}\n\n.fa-bookmark-o:before {\n  content: \"\\f097\";\n}\n\n.fa-phone-square:before {\n  content: \"\\f098\";\n}\n\n.fa-twitter:before {\n  content: \"\\f099\";\n}\n\n.fa-facebook-f:before,\n.fa-facebook:before {\n  content: \"\\f09a\";\n}\n\n.fa-github:before {\n  content: \"\\f09b\";\n}\n\n.fa-unlock:before, .xo-icon-unlock:before {\n  content: \"\\f09c\";\n}\n\n.fa-credit-card:before {\n  content: \"\\f09d\";\n}\n\n.fa-feed:before,\n.fa-rss:before {\n  content: \"\\f09e\";\n}\n\n.fa-hdd-o:before, .xo-icon-new-vm-disks:before, .xo-icon-disk:before {\n  content: \"\\f0a0\";\n}\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\";\n}\n\n.fa-bell:before, .xo-icon-notification:before, .xo-icon-update-ready:before, .xo-icon-menu-notification:before {\n  content: \"\\f0f3\";\n}\n\n.fa-certificate:before {\n  content: \"\\f0a3\";\n}\n\n.fa-hand-o-right:before {\n  content: \"\\f0a4\";\n}\n\n.fa-hand-o-left:before {\n  content: \"\\f0a5\";\n}\n\n.fa-hand-o-up:before {\n  content: \"\\f0a6\";\n}\n\n.fa-hand-o-down:before {\n  content: \"\\f0a7\";\n}\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\";\n}\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\";\n}\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\";\n}\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\";\n}\n\n.fa-globe:before, .xo-icon-proxy:before {\n  content: \"\\f0ac\";\n}\n\n.fa-wrench:before, .xo-icon-fix:before, .xo-icon-sr-enable:before, .xo-icon-vdi-enable:before, .xo-icon-ipmi:before, .xo-icon-administration:before {\n  content: \"\\f0ad\";\n}\n\n.fa-tasks:before, .xo-icon-task:before {\n  content: \"\\f0ae\";\n}\n\n.fa-filter:before, .xo-icon-filters:before {\n  content: \"\\f0b0\";\n}\n\n.fa-briefcase:before {\n  content: \"\\f0b1\";\n}\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\";\n}\n\n.fa-group:before,\n.fa-users:before,\n.xo-icon-menu-settings-groups:before,\n.xo-icon-group:before {\n  content: \"\\f0c0\";\n}\n\n.fa-chain:before,\n.fa-link:before,\n.xo-icon-connected:before,\n.xo-icon-connect:before {\n  content: \"\\f0c1\";\n}\n\n.fa-cloud:before, .xo-icon-menu-settings-servers:before, .xo-icon-menu-self-service:before, .xo-icon-self-service:before, .xo-icon-pool:before {\n  content: \"\\f0c2\";\n}\n\n.fa-flask:before {\n  content: \"\\f0c3\";\n}\n\n.fa-cut:before,\n.fa-scissors:before {\n  content: \"\\f0c4\";\n}\n\n.fa-copy:before, .xo-icon-vm-clone:before,\n.fa-files-o:before,\n.xo-icon-mirror-backup:before {\n  content: \"\\f0c5\";\n}\n\n.fa-paperclip:before {\n  content: \"\\f0c6\";\n}\n\n.fa-save:before,\n.fa-floppy-o:before,\n.xo-icon-save:before {\n  content: \"\\f0c7\";\n}\n\n.fa-square:before {\n  content: \"\\f0c8\";\n}\n\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before,\n.xo-icon-nav:before,\n.xo-icon-menu-collapse:before {\n  content: \"\\f0c9\";\n}\n\n.fa-list-ul:before {\n  content: \"\\f0ca\";\n}\n\n.fa-list-ol:before, .xo-icon-menu-backup-sequence:before {\n  content: \"\\f0cb\";\n}\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\";\n}\n\n.fa-underline:before {\n  content: \"\\f0cd\";\n}\n\n.fa-table:before {\n  content: \"\\f0ce\";\n}\n\n.fa-magic:before {\n  content: \"\\f0d0\";\n}\n\n.fa-truck:before {\n  content: \"\\f0d1\";\n}\n\n.fa-pinterest:before {\n  content: \"\\f0d2\";\n}\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\";\n}\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\";\n}\n\n.fa-google-plus:before {\n  content: \"\\f0d5\";\n}\n\n.fa-money:before {\n  content: \"\\f0d6\";\n}\n\n.fa-caret-down:before, .xo-icon-caret:before {\n  content: \"\\f0d7\";\n}\n\n.fa-caret-up:before, .xo-icon-caret-up:before {\n  content: \"\\f0d8\";\n}\n\n.fa-caret-left:before {\n  content: \"\\f0d9\";\n}\n\n.fa-caret-right:before {\n  content: \"\\f0da\";\n}\n\n.fa-columns:before {\n  content: \"\\f0db\";\n}\n\n.fa-unsorted:before,\n.fa-sort:before,\n.xo-icon-sort:before {\n  content: \"\\f0dc\";\n}\n\n.fa-sort-down:before,\n.fa-sort-desc:before {\n  content: \"\\f0dd\";\n}\n\n.fa-sort-up:before,\n.fa-sort-asc:before {\n  content: \"\\f0de\";\n}\n\n.fa-envelope:before {\n  content: \"\\f0e0\";\n}\n\n.fa-linkedin:before {\n  content: \"\\f0e1\";\n}\n\n.fa-rotate-left:before,\n.fa-undo:before,\n.xo-icon-new-vm-reset:before,\n.xo-icon-reset:before,\n.xo-icon-undo:before {\n  content: \"\\f0e2\";\n}\n\n.fa-legal:before,\n.fa-gavel:before,\n.xo-icon-sr-reclaim-space:before,\n.xo-icon-vdi-reclaim-space:before {\n  content: \"\\f0e3\";\n}\n\n.fa-dashboard:before, .xo-icon-new-vm-perf:before, .xo-icon-menu-dashboard:before,\n.fa-tachometer:before,\n.xo-icon-total-power:before {\n  content: \"\\f0e4\";\n}\n\n.fa-comment-o:before {\n  content: \"\\f0e5\";\n}\n\n.fa-comments-o:before {\n  content: \"\\f0e6\";\n}\n\n.fa-flash:before,\n.fa-bolt:before,\n.xo-icon-host-force-reboot:before,\n.xo-icon-vm-force-reboot:before {\n  content: \"\\f0e7\";\n}\n\n.fa-sitemap:before, .xo-icon-new-vm-interfaces:before, .xo-icon-menu-new-network:before, .xo-icon-network:before {\n  content: \"\\f0e8\";\n}\n\n.fa-umbrella:before {\n  content: \"\\f0e9\";\n}\n\n.fa-paste:before,\n.fa-clipboard:before,\n.xo-icon-clipboard:before {\n  content: \"\\f0ea\";\n}\n\n.fa-lightbulb-o:before {\n  content: \"\\f0eb\";\n}\n\n.fa-exchange:before, .xo-icon-rdp:before {\n  content: \"\\f0ec\";\n}\n\n.fa-cloud-download:before {\n  content: \"\\f0ed\";\n}\n\n.fa-cloud-upload:before, .xo-icon-xo-cloud-config:before, .xo-icon-plan-upgrade:before {\n  content: \"\\f0ee\";\n}\n\n.fa-user-md:before {\n  content: \"\\f0f0\";\n}\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\";\n}\n\n.fa-suitcase:before {\n  content: \"\\f0f2\";\n}\n\n.fa-bell-o:before {\n  content: \"\\f0a2\";\n}\n\n.fa-coffee:before {\n  content: \"\\f0f4\";\n}\n\n.fa-cutlery:before {\n  content: \"\\f0f5\";\n}\n\n.fa-file-text-o:before, .xo-icon-menu-license:before, .xo-icon-multiline-clipboard:before {\n  content: \"\\f0f6\";\n}\n\n.fa-building-o:before {\n  content: \"\\f0f7\";\n}\n\n.fa-hospital-o:before {\n  content: \"\\f0f8\";\n}\n\n.fa-ambulance:before {\n  content: \"\\f0f9\";\n}\n\n.fa-medkit:before, .xo-icon-fan-status:before, .xo-icon-disaster-recovery:before, .xo-icon-diagnosis:before {\n  content: \"\\f0fa\";\n}\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\";\n}\n\n.fa-beer:before {\n  content: \"\\f0fc\";\n}\n\n.fa-h-square:before {\n  content: \"\\f0fd\";\n}\n\n.fa-plus-square:before {\n  content: \"\\f0fe\";\n}\n\n.fa-angle-double-left:before {\n  content: \"\\f100\";\n}\n\n.fa-angle-double-right:before {\n  content: \"\\f101\";\n}\n\n.fa-angle-double-up:before {\n  content: \"\\f102\";\n}\n\n.fa-angle-double-down:before, .xo-icon-pool-rolling-update:before {\n  content: \"\\f103\";\n}\n\n.fa-angle-left:before {\n  content: \"\\f104\";\n}\n\n.fa-angle-right:before {\n  content: \"\\f105\";\n}\n\n.fa-angle-up:before {\n  content: \"\\f106\";\n}\n\n.fa-angle-down:before {\n  content: \"\\f107\";\n}\n\n.fa-desktop:before, .xo-icon-add-vm:before, .xo-icon-menu-new-vm:before, .xo-icon-vm-busy:before, .xo-icon-vm-halted:before, .xo-icon-vm-paused:before, .xo-icon-vm-suspended:before, .xo-icon-vm-running:before, .xo-icon-vm:before {\n  content: \"\\f108\";\n}\n\n.fa-laptop:before {\n  content: \"\\f109\";\n}\n\n.fa-tablet:before {\n  content: \"\\f10a\";\n}\n\n.fa-mobile-phone:before,\n.fa-mobile:before {\n  content: \"\\f10b\";\n}\n\n.fa-circle-o:before {\n  content: \"\\f10c\";\n}\n\n.fa-quote-left:before {\n  content: \"\\f10d\";\n}\n\n.fa-quote-right:before {\n  content: \"\\f10e\";\n}\n\n.fa-spinner:before, .xo-icon-loading:before {\n  content: \"\\f110\";\n}\n\n.fa-circle:before, .xo-icon-all-disconnected:before, .xo-icon-some-connected:before, .xo-icon-all-connected:before, .xo-icon-disabled:before, .xo-icon-busy:before, .xo-icon-unknown:before, .xo-icon-paused:before, .xo-icon-suspended:before, .xo-icon-halted:before, .xo-icon-skipped:before, .xo-icon-running:before, .xo-icon-circle:before {\n  content: \"\\f111\";\n}\n\n.fa-mail-reply:before,\n.fa-reply:before {\n  content: \"\\f112\";\n}\n\n.fa-github-alt:before {\n  content: \"\\f113\";\n}\n\n.fa-folder-o:before {\n  content: \"\\f114\";\n}\n\n.fa-folder-open-o:before {\n  content: \"\\f115\";\n}\n\n.fa-smile-o:before {\n  content: \"\\f118\";\n}\n\n.fa-frown-o:before {\n  content: \"\\f119\";\n}\n\n.fa-meh-o:before {\n  content: \"\\f11a\";\n}\n\n.fa-gamepad:before {\n  content: \"\\f11b\";\n}\n\n.fa-keyboard-o:before, .xo-icon-host-keyboard:before, .xo-icon-vm-keyboard:before, .xo-icon-shortcuts:before {\n  content: \"\\f11c\";\n}\n\n.fa-flag-o:before {\n  content: \"\\f11d\";\n}\n\n.fa-flag-checkered:before, .xo-icon-new-vm-summary:before, .xo-icon-summary:before {\n  content: \"\\f11e\";\n}\n\n.fa-terminal:before, .xo-icon-vm-console:before {\n  content: \"\\f120\";\n}\n\n.fa-code:before, .xo-icon-rest-api:before, .xo-icon-api:before {\n  content: \"\\f121\";\n}\n\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n  content: \"\\f122\";\n}\n\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n  content: \"\\f123\";\n}\n\n.fa-location-arrow:before {\n  content: \"\\f124\";\n}\n\n.fa-crop:before {\n  content: \"\\f125\";\n}\n\n.fa-code-fork:before, .xo-icon-vm-fast-clone:before, .xo-icon-delta-backup:before {\n  content: \"\\f126\";\n}\n\n.fa-unlink:before, .xo-icon-disconnect:before, .xo-icon-disconnected:before,\n.fa-chain-broken:before {\n  content: \"\\f127\";\n}\n\n.fa-question:before {\n  content: \"\\f128\";\n}\n\n.fa-info:before, .xo-icon-menu-about:before {\n  content: \"\\f129\";\n}\n\n.fa-exclamation:before {\n  content: \"\\f12a\";\n}\n\n.fa-superscript:before {\n  content: \"\\f12b\";\n}\n\n.fa-subscript:before {\n  content: \"\\f12c\";\n}\n\n.fa-eraser:before {\n  content: \"\\f12d\";\n}\n\n.fa-puzzle-piece:before, .xo-icon-menu-settings-plugins:before, .xo-icon-plugin:before {\n  content: \"\\f12e\";\n}\n\n.fa-microphone:before {\n  content: \"\\f130\";\n}\n\n.fa-microphone-slash:before {\n  content: \"\\f131\";\n}\n\n.fa-shield:before {\n  content: \"\\f132\";\n}\n\n.fa-calendar-o:before {\n  content: \"\\f133\";\n}\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\";\n}\n\n.fa-rocket:before, .xo-icon-deploy:before {\n  content: \"\\f135\";\n}\n\n.fa-maxcdn:before {\n  content: \"\\f136\";\n}\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\";\n}\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\";\n}\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\";\n}\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\";\n}\n\n.fa-html5:before {\n  content: \"\\f13b\";\n}\n\n.fa-css3:before {\n  content: \"\\f13c\";\n}\n\n.fa-anchor:before {\n  content: \"\\f13d\";\n}\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\";\n}\n\n.fa-bullseye:before {\n  content: \"\\f140\";\n}\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\";\n}\n\n.fa-ellipsis-v:before, .xo-icon-grab:before {\n  content: \"\\f142\";\n}\n\n.fa-rss-square:before {\n  content: \"\\f143\";\n}\n\n.fa-play-circle:before {\n  content: \"\\f144\";\n}\n\n.fa-ticket:before, .xo-icon-ticket:before {\n  content: \"\\f145\";\n}\n\n.fa-minus-square:before {\n  content: \"\\f146\";\n}\n\n.fa-minus-square-o:before {\n  content: \"\\f147\";\n}\n\n.fa-level-up:before {\n  content: \"\\f148\";\n}\n\n.fa-level-down:before {\n  content: \"\\f149\";\n}\n\n.fa-check-square:before {\n  content: \"\\f14a\";\n}\n\n.fa-pencil-square:before {\n  content: \"\\f14b\";\n}\n\n.fa-external-link-square:before {\n  content: \"\\f14c\";\n}\n\n.fa-share-square:before {\n  content: \"\\f14d\";\n}\n\n.fa-compass:before {\n  content: \"\\f14e\";\n}\n\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n  content: \"\\f150\";\n}\n\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n  content: \"\\f151\";\n}\n\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n  content: \"\\f152\";\n}\n\n.fa-euro:before,\n.fa-eur:before {\n  content: \"\\f153\";\n}\n\n.fa-gbp:before {\n  content: \"\\f154\";\n}\n\n.fa-dollar:before,\n.fa-usd:before {\n  content: \"\\f155\";\n}\n\n.fa-rupee:before,\n.fa-inr:before {\n  content: \"\\f156\";\n}\n\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n  content: \"\\f157\";\n}\n\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n  content: \"\\f158\";\n}\n\n.fa-won:before,\n.fa-krw:before {\n  content: \"\\f159\";\n}\n\n.fa-bitcoin:before,\n.fa-btc:before {\n  content: \"\\f15a\";\n}\n\n.fa-file:before {\n  content: \"\\f15b\";\n}\n\n.fa-file-text:before, .xo-icon-pro-support:before {\n  content: \"\\f15c\";\n}\n\n.fa-sort-alpha-asc:before {\n  content: \"\\f15d\";\n}\n\n.fa-sort-alpha-desc:before {\n  content: \"\\f15e\";\n}\n\n.fa-sort-amount-asc:before {\n  content: \"\\f160\";\n}\n\n.fa-sort-amount-desc:before {\n  content: \"\\f161\";\n}\n\n.fa-sort-numeric-asc:before {\n  content: \"\\f162\";\n}\n\n.fa-sort-numeric-desc:before {\n  content: \"\\f163\";\n}\n\n.fa-thumbs-up:before, .xo-icon-trial:before {\n  content: \"\\f164\";\n}\n\n.fa-thumbs-down:before {\n  content: \"\\f165\";\n}\n\n.fa-youtube-square:before {\n  content: \"\\f166\";\n}\n\n.fa-youtube:before {\n  content: \"\\f167\";\n}\n\n.fa-xing:before {\n  content: \"\\f168\";\n}\n\n.fa-xing-square:before {\n  content: \"\\f169\";\n}\n\n.fa-youtube-play:before {\n  content: \"\\f16a\";\n}\n\n.fa-dropbox:before {\n  content: \"\\f16b\";\n}\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\";\n}\n\n.fa-instagram:before {\n  content: \"\\f16d\";\n}\n\n.fa-flickr:before {\n  content: \"\\f16e\";\n}\n\n.fa-adn:before {\n  content: \"\\f170\";\n}\n\n.fa-bitbucket:before {\n  content: \"\\f171\";\n}\n\n.fa-bitbucket-square:before {\n  content: \"\\f172\";\n}\n\n.fa-tumblr:before {\n  content: \"\\f173\";\n}\n\n.fa-tumblr-square:before {\n  content: \"\\f174\";\n}\n\n.fa-long-arrow-down:before {\n  content: \"\\f175\";\n}\n\n.fa-long-arrow-up:before {\n  content: \"\\f176\";\n}\n\n.fa-long-arrow-left:before {\n  content: \"\\f177\";\n}\n\n.fa-long-arrow-right:before {\n  content: \"\\f178\";\n}\n\n.fa-apple:before {\n  content: \"\\f179\";\n}\n\n.fa-windows:before, .xo-icon-windows:before {\n  content: \"\\f17a\";\n}\n\n.fa-android:before {\n  content: \"\\f17b\";\n}\n\n.fa-linux:before, .xo-icon-linux:before {\n  content: \"\\f17c\";\n}\n\n.fa-dribbble:before {\n  content: \"\\f17d\";\n}\n\n.fa-skype:before {\n  content: \"\\f17e\";\n}\n\n.fa-foursquare:before {\n  content: \"\\f180\";\n}\n\n.fa-trello:before {\n  content: \"\\f181\";\n}\n\n.fa-female:before {\n  content: \"\\f182\";\n}\n\n.fa-male:before {\n  content: \"\\f183\";\n}\n\n.fa-gittip:before,\n.fa-gratipay:before {\n  content: \"\\f184\";\n}\n\n.fa-sun-o:before {\n  content: \"\\f185\";\n}\n\n.fa-moon-o:before {\n  content: \"\\f186\";\n}\n\n.fa-archive:before, .xo-icon-menu-backup:before, .xo-icon-backup:before {\n  content: \"\\f187\";\n}\n\n.fa-bug:before, .xo-icon-bug:before {\n  content: \"\\f188\";\n}\n\n.fa-vk:before {\n  content: \"\\f189\";\n}\n\n.fa-weibo:before {\n  content: \"\\f18a\";\n}\n\n.fa-renren:before {\n  content: \"\\f18b\";\n}\n\n.fa-pagelines:before {\n  content: \"\\f18c\";\n}\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\";\n}\n\n.fa-arrow-circle-o-right:before {\n  content: \"\\f18e\";\n}\n\n.fa-arrow-circle-o-left:before {\n  content: \"\\f190\";\n}\n\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n  content: \"\\f191\";\n}\n\n.fa-dot-circle-o:before {\n  content: \"\\f192\";\n}\n\n.fa-wheelchair:before {\n  content: \"\\f193\";\n}\n\n.fa-vimeo-square:before {\n  content: \"\\f194\";\n}\n\n.fa-turkish-lira:before,\n.fa-try:before {\n  content: \"\\f195\";\n}\n\n.fa-plus-square-o:before {\n  content: \"\\f196\";\n}\n\n.fa-space-shuttle:before {\n  content: \"\\f197\";\n}\n\n.fa-slack:before {\n  content: \"\\f198\";\n}\n\n.fa-envelope-square:before {\n  content: \"\\f199\";\n}\n\n.fa-wordpress:before {\n  content: \"\\f19a\";\n}\n\n.fa-openid:before {\n  content: \"\\f19b\";\n}\n\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n  content: \"\\f19c\";\n}\n\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n  content: \"\\f19d\";\n}\n\n.fa-yahoo:before {\n  content: \"\\f19e\";\n}\n\n.fa-google:before {\n  content: \"\\f1a0\";\n}\n\n.fa-reddit:before {\n  content: \"\\f1a1\";\n}\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\";\n}\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\";\n}\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\";\n}\n\n.fa-delicious:before {\n  content: \"\\f1a5\";\n}\n\n.fa-digg:before {\n  content: \"\\f1a6\";\n}\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\";\n}\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\";\n}\n\n.fa-drupal:before {\n  content: \"\\f1a9\";\n}\n\n.fa-joomla:before {\n  content: \"\\f1aa\";\n}\n\n.fa-language:before {\n  content: \"\\f1ab\";\n}\n\n.fa-fax:before {\n  content: \"\\f1ac\";\n}\n\n.fa-building:before {\n  content: \"\\f1ad\";\n}\n\n.fa-child:before {\n  content: \"\\f1ae\";\n}\n\n.fa-paw:before {\n  content: \"\\f1b0\";\n}\n\n.fa-spoon:before {\n  content: \"\\f1b1\";\n}\n\n.fa-cube:before, .xo-icon-menu-xoa:before, .xo-icon-hub-template:before {\n  content: \"\\f1b2\";\n}\n\n.fa-cubes:before, .xo-icon-menu-hub:before {\n  content: \"\\f1b3\";\n}\n\n.fa-behance:before {\n  content: \"\\f1b4\";\n}\n\n.fa-behance-square:before {\n  content: \"\\f1b5\";\n}\n\n.fa-steam:before {\n  content: \"\\f1b6\";\n}\n\n.fa-steam-square:before {\n  content: \"\\f1b7\";\n}\n\n.fa-recycle:before, .xo-icon-clean-vm:before {\n  content: \"\\f1b8\";\n}\n\n.fa-automobile:before,\n.fa-car:before {\n  content: \"\\f1b9\";\n}\n\n.fa-cab:before,\n.fa-taxi:before {\n  content: \"\\f1ba\";\n}\n\n.fa-tree:before {\n  content: \"\\f1bb\";\n}\n\n.fa-spotify:before {\n  content: \"\\f1bc\";\n}\n\n.fa-deviantart:before {\n  content: \"\\f1bd\";\n}\n\n.fa-soundcloud:before {\n  content: \"\\f1be\";\n}\n\n.fa-database:before, .xo-icon-add-sr:before, .xo-icon-menu-xostor:before, .xo-icon-menu-new-sr:before, .xo-icon-database:before, .xo-icon-sr:before {\n  content: \"\\f1c0\";\n}\n\n.fa-file-pdf-o:before {\n  content: \"\\f1c1\";\n}\n\n.fa-file-word-o:before {\n  content: \"\\f1c2\";\n}\n\n.fa-file-excel-o:before {\n  content: \"\\f1c3\";\n}\n\n.fa-file-powerpoint-o:before {\n  content: \"\\f1c4\";\n}\n\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n  content: \"\\f1c5\";\n}\n\n.fa-file-zip-o:before,\n.fa-file-archive-o:before,\n.xo-icon-menu-new-import:before,\n.xo-icon-import:before {\n  content: \"\\f1c6\";\n}\n\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n  content: \"\\f1c7\";\n}\n\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n  content: \"\\f1c8\";\n}\n\n.fa-file-code-o:before {\n  content: \"\\f1c9\";\n}\n\n.fa-vine:before {\n  content: \"\\f1ca\";\n}\n\n.fa-codepen:before {\n  content: \"\\f1cb\";\n}\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\";\n}\n\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.xo-icon-support:before,\n.xo-icon-menu-support:before,\n.fa-life-ring:before,\n.xo-icon-help:before {\n  content: \"\\f1cd\";\n}\n\n.fa-circle-o-notch:before, .xo-icon-pool-rolling-reboot:before, .xo-icon-fan-speed:before {\n  content: \"\\f1ce\";\n}\n\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n  content: \"\\f1d0\";\n}\n\n.fa-ge:before,\n.fa-empire:before {\n  content: \"\\f1d1\";\n}\n\n.fa-git-square:before, .xo-icon-git:before {\n  content: \"\\f1d2\";\n}\n\n.fa-git:before {\n  content: \"\\f1d3\";\n}\n\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n  content: \"\\f1d4\";\n}\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\";\n}\n\n.fa-qq:before {\n  content: \"\\f1d6\";\n}\n\n.fa-wechat:before,\n.fa-weixin:before {\n  content: \"\\f1d7\";\n}\n\n.fa-send:before,\n.fa-paper-plane:before {\n  content: \"\\f1d8\";\n}\n\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n  content: \"\\f1d9\";\n}\n\n.fa-history:before {\n  content: \"\\f1da\";\n}\n\n.fa-circle-thin:before, .xo-icon-circle-thin:before {\n  content: \"\\f1db\";\n}\n\n.fa-header:before {\n  content: \"\\f1dc\";\n}\n\n.fa-paragraph:before {\n  content: \"\\f1dd\";\n}\n\n.fa-sliders:before, .xo-icon-memory:before {\n  content: \"\\f1de\";\n}\n\n.fa-share-alt:before {\n  content: \"\\f1e0\";\n}\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\";\n}\n\n.fa-bomb:before {\n  content: \"\\f1e2\";\n}\n\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n  content: \"\\f1e3\";\n}\n\n.fa-tty:before {\n  content: \"\\f1e4\";\n}\n\n.fa-binoculars:before {\n  content: \"\\f1e5\";\n}\n\n.fa-plug:before, .xo-icon-menu-backup-remotes:before, .xo-icon-vm-force-shutdown:before, .xo-icon-psu:before, .xo-icon-remote:before {\n  content: \"\\f1e6\";\n}\n\n.fa-slideshare:before {\n  content: \"\\f1e7\";\n}\n\n.fa-twitch:before {\n  content: \"\\f1e8\";\n}\n\n.fa-yelp:before {\n  content: \"\\f1e9\";\n}\n\n.fa-newspaper-o:before {\n  content: \"\\f1ea\";\n}\n\n.fa-wifi:before {\n  content: \"\\f1eb\";\n}\n\n.fa-calculator:before {\n  content: \"\\f1ec\";\n}\n\n.fa-paypal:before {\n  content: \"\\f1ed\";\n}\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\";\n}\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\";\n}\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\";\n}\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\";\n}\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\";\n}\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\";\n}\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\";\n}\n\n.fa-bell-slash:before, .xo-icon-not-registered:before {\n  content: \"\\f1f6\";\n}\n\n.fa-bell-slash-o:before {\n  content: \"\\f1f7\";\n}\n\n.fa-trash:before, .xo-icon-snapshot-delete:before, .xo-icon-host-delete:before, .xo-icon-vm-delete:before, .xo-icon-sr-remove:before, .xo-icon-vdi-remove:before, .xo-icon-task-destroy:before, .xo-icon-delete:before, .xo-icon-destroy:before {\n  content: \"\\f1f8\";\n}\n\n.fa-copyright:before {\n  content: \"\\f1f9\";\n}\n\n.fa-at:before {\n  content: \"\\f1fa\";\n}\n\n.fa-eyedropper:before {\n  content: \"\\f1fb\";\n}\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\";\n}\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\";\n}\n\n.fa-area-chart:before, .xo-icon-telemetry:before {\n  content: \"\\f1fe\";\n}\n\n.fa-pie-chart:before, .xo-icon-menu-dashboard-visualization:before {\n  content: \"\\f200\";\n}\n\n.fa-line-chart:before {\n  content: \"\\f201\";\n}\n\n.fa-lastfm:before {\n  content: \"\\f202\";\n}\n\n.fa-lastfm-square:before {\n  content: \"\\f203\";\n}\n\n.fa-toggle-off:before, .xo-icon-toggle-off:before {\n  content: \"\\f204\";\n}\n\n.fa-toggle-on:before, .xo-icon-toggle-on:before {\n  content: \"\\f205\";\n}\n\n.fa-bicycle:before {\n  content: \"\\f206\";\n}\n\n.fa-bus:before {\n  content: \"\\f207\";\n}\n\n.fa-ioxhost:before {\n  content: \"\\f208\";\n}\n\n.fa-angellist:before {\n  content: \"\\f209\";\n}\n\n.fa-cc:before {\n  content: \"\\f20a\";\n}\n\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n  content: \"\\f20b\";\n}\n\n.fa-meanpath:before {\n  content: \"\\f20c\";\n}\n\n.fa-buysellads:before {\n  content: \"\\f20d\";\n}\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\";\n}\n\n.fa-dashcube:before {\n  content: \"\\f210\";\n}\n\n.fa-forumbee:before {\n  content: \"\\f211\";\n}\n\n.fa-leanpub:before {\n  content: \"\\f212\";\n}\n\n.fa-sellsy:before {\n  content: \"\\f213\";\n}\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\";\n}\n\n.fa-simplybuilt:before {\n  content: \"\\f215\";\n}\n\n.fa-skyatlas:before {\n  content: \"\\f216\";\n}\n\n.fa-cart-plus:before {\n  content: \"\\f217\";\n}\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\";\n}\n\n.fa-diamond:before {\n  content: \"\\f219\";\n}\n\n.fa-ship:before, .xo-icon-vm-docker:before {\n  content: \"\\f21a\";\n}\n\n.fa-user-secret:before {\n  content: \"\\f21b\";\n}\n\n.fa-motorcycle:before {\n  content: \"\\f21c\";\n}\n\n.fa-street-view:before {\n  content: \"\\f21d\";\n}\n\n.fa-heartbeat:before, .xo-icon-menu-dashboard-health:before, .xo-icon-health:before {\n  content: \"\\f21e\";\n}\n\n.fa-venus:before {\n  content: \"\\f221\";\n}\n\n.fa-mars:before {\n  content: \"\\f222\";\n}\n\n.fa-mercury:before {\n  content: \"\\f223\";\n}\n\n.fa-intersex:before,\n.fa-transgender:before {\n  content: \"\\f224\";\n}\n\n.fa-transgender-alt:before {\n  content: \"\\f225\";\n}\n\n.fa-venus-double:before {\n  content: \"\\f226\";\n}\n\n.fa-mars-double:before {\n  content: \"\\f227\";\n}\n\n.fa-venus-mars:before {\n  content: \"\\f228\";\n}\n\n.fa-mars-stroke:before {\n  content: \"\\f229\";\n}\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\";\n}\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\";\n}\n\n.fa-neuter:before {\n  content: \"\\f22c\";\n}\n\n.fa-genderless:before {\n  content: \"\\f22d\";\n}\n\n.fa-facebook-official:before {\n  content: \"\\f230\";\n}\n\n.fa-pinterest-p:before {\n  content: \"\\f231\";\n}\n\n.fa-whatsapp:before {\n  content: \"\\f232\";\n}\n\n.fa-server:before, .xo-icon-add-host:before, .xo-icon-host-busy:before, .xo-icon-host-disabled:before, .xo-icon-host-halted:before, .xo-icon-host-running:before, .xo-icon-host:before {\n  content: \"\\f233\";\n}\n\n.fa-user-plus:before {\n  content: \"\\f234\";\n}\n\n.fa-user-times:before {\n  content: \"\\f235\";\n}\n\n.fa-hotel:before,\n.fa-bed:before {\n  content: \"\\f236\";\n}\n\n.fa-viacoin:before {\n  content: \"\\f237\";\n}\n\n.fa-train:before {\n  content: \"\\f238\";\n}\n\n.fa-subway:before {\n  content: \"\\f239\";\n}\n\n.fa-medium:before {\n  content: \"\\f23a\";\n}\n\n.fa-yc:before,\n.fa-y-combinator:before {\n  content: \"\\f23b\";\n}\n\n.fa-optin-monster:before {\n  content: \"\\f23c\";\n}\n\n.fa-opencart:before {\n  content: \"\\f23d\";\n}\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\";\n}\n\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n  content: \"\\f240\";\n}\n\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n  content: \"\\f241\";\n}\n\n.fa-battery-2:before,\n.fa-battery-half:before {\n  content: \"\\f242\";\n}\n\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n  content: \"\\f243\";\n}\n\n.fa-battery-0:before,\n.fa-battery-empty:before {\n  content: \"\\f244\";\n}\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\";\n}\n\n.fa-i-cursor:before {\n  content: \"\\f246\";\n}\n\n.fa-object-group:before, .xo-icon-files:before {\n  content: \"\\f247\";\n}\n\n.fa-object-ungroup:before {\n  content: \"\\f248\";\n}\n\n.fa-sticky-note:before {\n  content: \"\\f249\";\n}\n\n.fa-sticky-note-o:before {\n  content: \"\\f24a\";\n}\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\";\n}\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\";\n}\n\n.fa-clone:before, .xo-icon-vm-copy:before {\n  content: \"\\f24d\";\n}\n\n.fa-balance-scale:before, .xo-icon-scale:before {\n  content: \"\\f24e\";\n}\n\n.fa-hourglass-o:before {\n  content: \"\\f250\";\n}\n\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n  content: \"\\f251\";\n}\n\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n  content: \"\\f252\";\n}\n\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n  content: \"\\f253\";\n}\n\n.fa-hourglass:before {\n  content: \"\\f254\";\n}\n\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n  content: \"\\f255\";\n}\n\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n  content: \"\\f256\";\n}\n\n.fa-hand-scissors-o:before {\n  content: \"\\f257\";\n}\n\n.fa-hand-lizard-o:before {\n  content: \"\\f258\";\n}\n\n.fa-hand-spock-o:before {\n  content: \"\\f259\";\n}\n\n.fa-hand-pointer-o:before {\n  content: \"\\f25a\";\n}\n\n.fa-hand-peace-o:before {\n  content: \"\\f25b\";\n}\n\n.fa-trademark:before {\n  content: \"\\f25c\";\n}\n\n.fa-registered:before {\n  content: \"\\f25d\";\n}\n\n.fa-creative-commons:before {\n  content: \"\\f25e\";\n}\n\n.fa-gg:before {\n  content: \"\\f260\";\n}\n\n.fa-gg-circle:before {\n  content: \"\\f261\";\n}\n\n.fa-tripadvisor:before {\n  content: \"\\f262\";\n}\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\";\n}\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\";\n}\n\n.fa-get-pocket:before {\n  content: \"\\f265\";\n}\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\";\n}\n\n.fa-safari:before {\n  content: \"\\f267\";\n}\n\n.fa-chrome:before {\n  content: \"\\f268\";\n}\n\n.fa-firefox:before {\n  content: \"\\f269\";\n}\n\n.fa-opera:before {\n  content: \"\\f26a\";\n}\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\";\n}\n\n.fa-tv:before,\n.fa-television:before {\n  content: \"\\f26c\";\n}\n\n.fa-contao:before {\n  content: \"\\f26d\";\n}\n\n.fa-500px:before {\n  content: \"\\f26e\";\n}\n\n.fa-amazon:before {\n  content: \"\\f270\";\n}\n\n.fa-calendar-plus-o:before {\n  content: \"\\f271\";\n}\n\n.fa-calendar-minus-o:before {\n  content: \"\\f272\";\n}\n\n.fa-calendar-times-o:before {\n  content: \"\\f273\";\n}\n\n.fa-calendar-check-o:before {\n  content: \"\\f274\";\n}\n\n.fa-industry:before {\n  content: \"\\f275\";\n}\n\n.fa-map-pin:before {\n  content: \"\\f276\";\n}\n\n.fa-map-signs:before, .xo-icon-continuous-replication:before {\n  content: \"\\f277\";\n}\n\n.fa-map-o:before {\n  content: \"\\f278\";\n}\n\n.fa-map:before {\n  content: \"\\f279\";\n}\n\n.fa-commenting:before {\n  content: \"\\f27a\";\n}\n\n.fa-commenting-o:before {\n  content: \"\\f27b\";\n}\n\n.fa-houzz:before {\n  content: \"\\f27c\";\n}\n\n.fa-vimeo:before {\n  content: \"\\f27d\";\n}\n\n.fa-black-tie:before {\n  content: \"\\f27e\";\n}\n\n.fa-fonticons:before {\n  content: \"\\f280\";\n}\n\n.fa-reddit-alien:before {\n  content: \"\\f281\";\n}\n\n.fa-edge:before {\n  content: \"\\f282\";\n}\n\n.fa-credit-card-alt:before {\n  content: \"\\f283\";\n}\n\n.fa-codiepie:before {\n  content: \"\\f284\";\n}\n\n.fa-modx:before {\n  content: \"\\f285\";\n}\n\n.fa-fort-awesome:before {\n  content: \"\\f286\";\n}\n\n.fa-usb:before {\n  content: \"\\f287\";\n}\n\n.fa-product-hunt:before {\n  content: \"\\f288\";\n}\n\n.fa-mixcloud:before {\n  content: \"\\f289\";\n}\n\n.fa-scribd:before {\n  content: \"\\f28a\";\n}\n\n.fa-pause-circle:before {\n  content: \"\\f28b\";\n}\n\n.fa-pause-circle-o:before {\n  content: \"\\f28c\";\n}\n\n.fa-stop-circle:before {\n  content: \"\\f28d\";\n}\n\n.fa-stop-circle-o:before {\n  content: \"\\f28e\";\n}\n\n.fa-shopping-bag:before {\n  content: \"\\f290\";\n}\n\n.fa-shopping-basket:before {\n  content: \"\\f291\";\n}\n\n.fa-hashtag:before {\n  content: \"\\f292\";\n}\n\n.fa-bluetooth:before {\n  content: \"\\f293\";\n}\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\";\n}\n\n.fa-percent:before {\n  content: \"\\f295\";\n}\n\n.fa-gitlab:before {\n  content: \"\\f296\";\n}\n\n.fa-wpbeginner:before {\n  content: \"\\f297\";\n}\n\n.fa-wpforms:before, .xo-icon-hub-recipe:before {\n  content: \"\\f298\";\n}\n\n.fa-envira:before {\n  content: \"\\f299\";\n}\n\n.fa-universal-access:before {\n  content: \"\\f29a\";\n}\n\n.fa-wheelchair-alt:before {\n  content: \"\\f29b\";\n}\n\n.fa-question-circle-o:before {\n  content: \"\\f29c\";\n}\n\n.fa-blind:before {\n  content: \"\\f29d\";\n}\n\n.fa-audio-description:before {\n  content: \"\\f29e\";\n}\n\n.fa-volume-control-phone:before {\n  content: \"\\f2a0\";\n}\n\n.fa-braille:before {\n  content: \"\\f2a1\";\n}\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\";\n}\n\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\";\n}\n\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n  content: \"\\f2a4\";\n}\n\n.fa-glide:before {\n  content: \"\\f2a5\";\n}\n\n.fa-glide-g:before {\n  content: \"\\f2a6\";\n}\n\n.fa-signing:before,\n.fa-sign-language:before {\n  content: \"\\f2a7\";\n}\n\n.fa-low-vision:before {\n  content: \"\\f2a8\";\n}\n\n.fa-viadeo:before {\n  content: \"\\f2a9\";\n}\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\";\n}\n\n.fa-snapchat:before {\n  content: \"\\f2ab\";\n}\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\";\n}\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\";\n}\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\";\n}\n\n.fa-first-order:before {\n  content: \"\\f2b0\";\n}\n\n.fa-yoast:before {\n  content: \"\\f2b1\";\n}\n\n.fa-themeisle:before {\n  content: \"\\f2b2\";\n}\n\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n  content: \"\\f2b3\";\n}\n\n.fa-fa:before,\n.fa-font-awesome:before {\n  content: \"\\f2b4\";\n}\n\n.fa-handshake-o:before {\n  content: \"\\f2b5\";\n}\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\";\n}\n\n.fa-envelope-open-o:before {\n  content: \"\\f2b7\";\n}\n\n.fa-linode:before {\n  content: \"\\f2b8\";\n}\n\n.fa-address-book:before {\n  content: \"\\f2b9\";\n}\n\n.fa-address-book-o:before {\n  content: \"\\f2ba\";\n}\n\n.fa-vcard:before,\n.fa-address-card:before {\n  content: \"\\f2bb\";\n}\n\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n  content: \"\\f2bc\";\n}\n\n.fa-user-circle:before {\n  content: \"\\f2bd\";\n}\n\n.fa-user-circle-o:before {\n  content: \"\\f2be\";\n}\n\n.fa-user-o:before {\n  content: \"\\f2c0\";\n}\n\n.fa-id-badge:before {\n  content: \"\\f2c1\";\n}\n\n.fa-drivers-license:before,\n.fa-id-card:before {\n  content: \"\\f2c2\";\n}\n\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n  content: \"\\f2c3\";\n}\n\n.fa-quora:before {\n  content: \"\\f2c4\";\n}\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\";\n}\n\n.fa-telegram:before {\n  content: \"\\f2c6\";\n}\n\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before,\n.xo-icon-cpu-temperature:before {\n  content: \"\\f2c7\";\n}\n\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\";\n}\n\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n  content: \"\\f2c9\";\n}\n\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\";\n}\n\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\";\n}\n\n.fa-shower:before {\n  content: \"\\f2cc\";\n}\n\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n  content: \"\\f2cd\";\n}\n\n.fa-podcast:before {\n  content: \"\\f2ce\";\n}\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\";\n}\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\";\n}\n\n.fa-window-restore:before {\n  content: \"\\f2d2\";\n}\n\n.fa-times-rectangle:before,\n.fa-window-close:before {\n  content: \"\\f2d3\";\n}\n\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n  content: \"\\f2d4\";\n}\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\";\n}\n\n.fa-grav:before {\n  content: \"\\f2d6\";\n}\n\n.fa-etsy:before {\n  content: \"\\f2d7\";\n}\n\n.fa-imdb:before {\n  content: \"\\f2d8\";\n}\n\n.fa-ravelry:before {\n  content: \"\\f2d9\";\n}\n\n.fa-eercast:before {\n  content: \"\\f2da\";\n}\n\n.fa-microchip:before, .xo-icon-bios-version:before, .xo-icon-vgpu:before, .xo-icon-gpu:before, .xo-icon-cpu:before {\n  content: \"\\f2db\";\n}\n\n.fa-snowflake-o:before, .xo-icon-freeze:before {\n  content: \"\\f2dc\";\n}\n\n.fa-superpowers:before {\n  content: \"\\f2dd\";\n}\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\";\n}\n\n.fa-meetup:before {\n  content: \"\\f2e0\";\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n\n/*!\n * Font Mfizz 2.4.1\n * Copyright 2013-2017 Fizzed, Inc.\n * MIT License\n *\n * Project: http://fizzed.com/oss/font-mfizz\n *\n * The font designed for technology and software geeks representing programming\n * languages, operating systems, software engineering, and technology.\n *\n * Fizzed, Inc.\n * Web: http://fizzed.com/\n * Twitter: http://twitter.com/fizzed_inc\n */\n@font-face {\n  font-family: \"FontMfizz\";\n  src: url(\"./font-mfizz.eot\");\n  src: url(\"./font-mfizz.eot?#iefix\") format(\"embedded-opentype\"), url(\"./font-mfizz.woff\") format(\"woff\"), url(\"./font-mfizz.ttf\") format(\"truetype\"), url(\"./font-mfizz.svg#font-mfizz\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  @font-face {\n    font-family: \"FontMfizz\";\n    src: url(\"./font-mfizz.svg#font-mfizz\") format(\"svg\");\n  }\n}\n[data-icon]:before {\n  content: attr(data-icon);\n}\n\n[data-icon]:before,\n.icon-3dprint:before,\n.icon-alpinelinux:before,\n.icon-angular:before,\n.icon-angular-alt:before,\n.icon-antenna:before,\n.icon-apache:before,\n.icon-archlinux:before,\n.icon-aws:before,\n.icon-azure:before,\n.icon-backbone:before,\n.icon-blackberry:before,\n.icon-bomb:before,\n.icon-bootstrap:before,\n.icon-c:before,\n.icon-cassandra:before,\n.icon-centos:before,\n.xo-icon-centos:before,\n.icon-clojure:before,\n.icon-codeigniter:before,\n.icon-codepen:before,\n.icon-coffee-bean:before,\n.icon-cplusplus:before,\n.icon-csharp:before,\n.icon-css:before,\n.icon-css3:before,\n.icon-css3-alt:before,\n.icon-d3:before,\n.icon-database:before,\n.icon-database-alt:before,\n.icon-database-alt2:before,\n.icon-debian:before,\n.xo-icon-debian:before,\n.icon-docker:before,\n.xo-icon-docker:before,\n.icon-dreamhost:before,\n.icon-elixir:before,\n.icon-elm:before,\n.icon-erlang:before,\n.icon-exherbo:before,\n.icon-fedora:before,\n.xo-icon-fedora:before,\n.icon-fire-alt:before,\n.icon-freebsd:before,\n.xo-icon-freebsd:before,\n.icon-freecodecamp:before,\n.icon-gentoo:before,\n.xo-icon-gentoo:before,\n.icon-ghost:before,\n.icon-git:before,\n.icon-gnome:before,\n.icon-go:before,\n.icon-go-alt:before,\n.icon-google:before,\n.icon-google-alt:before,\n.icon-google-code:before,\n.icon-google-developers:before,\n.icon-gradle:before,\n.icon-grails:before,\n.icon-grails-alt:before,\n.icon-grunt:before,\n.icon-gulp:before,\n.icon-gulp-alt:before,\n.icon-hadoop:before,\n.icon-haskell:before,\n.icon-heroku:before,\n.icon-html:before,\n.icon-html5:before,\n.icon-html5-alt:before,\n.icon-iphone:before,\n.icon-java:before,\n.icon-java-bold:before,\n.icon-java-duke:before,\n.icon-javascript:before,\n.icon-javascript-alt:before,\n.icon-jetty:before,\n.icon-jquery:before,\n.icon-kde:before,\n.icon-laravel:before,\n.icon-line-graph:before,\n.icon-linux-mint:before,\n.xo-icon-linux-mint:before,\n.icon-looking:before,\n.icon-magento:before,\n.icon-mariadb:before,\n.icon-maven:before,\n.icon-microscope:before,\n.icon-mobile-device:before,\n.icon-mobile-phone-alt:before,\n.icon-mobile-phone-broadcast:before,\n.icon-mongodb:before,\n.icon-mssql:before,\n.icon-mysql:before,\n.icon-mysql-alt:before,\n.icon-netbsd:before,\n.xo-icon-netbsd:before,\n.icon-nginx:before,\n.icon-nginx-alt:before,\n.icon-nginx-alt2:before,\n.icon-nodejs:before,\n.icon-npm:before,\n.icon-objc:before,\n.icon-openshift:before,\n.icon-oracle:before,\n.xo-icon-oracle:before,\n.icon-oracle-alt:before,\n.icon-osx:before,\n.xo-icon-osx:before,\n.icon-perl:before,\n.icon-phone-alt:before,\n.icon-phone-gap:before,\n.icon-phone-retro:before,\n.icon-php:before,\n.icon-php-alt:before,\n.icon-playframework:before,\n.icon-playframework-alt:before,\n.icon-plone:before,\n.icon-postgres:before,\n.icon-postgres-alt:before,\n.icon-python:before,\n.icon-raspberrypi:before,\n.icon-reactjs:before,\n.icon-redhat:before,\n.xo-icon-redhat:before,\n.icon-redis:before,\n.icon-ruby:before,\n.icon-ruby-on-rails:before,\n.icon-ruby-on-rails-alt:before,\n.icon-rust:before,\n.icon-sass:before,\n.icon-satellite:before,\n.icon-scala:before,\n.icon-scala-alt:before,\n.icon-script:before,\n.icon-script-alt:before,\n.icon-shell:before,\n.icon-sitefinity:before,\n.icon-solaris:before,\n.xo-icon-solaris:before,\n.icon-splatter:before,\n.icon-spring:before,\n.icon-suse:before,\n.xo-icon-suse:before,\n.icon-svg:before,\n.icon-symfony:before,\n.icon-tomcat:before,\n.icon-ubuntu:before,\n.xo-icon-ubuntu:before,\n.icon-unity:before,\n.icon-wireless:before,\n.icon-wordpress:before,\n.icon-x11:before {\n  display: inline-block;\n  font-family: \"FontMfizz\";\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  line-height: 1;\n  text-decoration: inherit;\n  text-rendering: optimizeLegibility;\n  text-transform: none;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n}\n\n.icon-3dprint:before {\n  content: \"\\f100\";\n}\n\n.icon-alpinelinux:before {\n  content: \"\\f101\";\n}\n\n.icon-angular:before {\n  content: \"\\f102\";\n}\n\n.icon-angular-alt:before {\n  content: \"\\f103\";\n}\n\n.icon-antenna:before {\n  content: \"\\f104\";\n}\n\n.icon-apache:before {\n  content: \"\\f105\";\n}\n\n.icon-archlinux:before {\n  content: \"\\f106\";\n}\n\n.icon-aws:before {\n  content: \"\\f107\";\n}\n\n.icon-azure:before {\n  content: \"\\f108\";\n}\n\n.icon-backbone:before {\n  content: \"\\f109\";\n}\n\n.icon-blackberry:before {\n  content: \"\\f10a\";\n}\n\n.icon-bomb:before {\n  content: \"\\f10b\";\n}\n\n.icon-bootstrap:before {\n  content: \"\\f10c\";\n}\n\n.icon-c:before {\n  content: \"\\f10d\";\n}\n\n.icon-cassandra:before {\n  content: \"\\f10e\";\n}\n\n.icon-centos:before, .xo-icon-centos:before {\n  content: \"\\f10f\";\n}\n\n.icon-clojure:before {\n  content: \"\\f110\";\n}\n\n.icon-codeigniter:before {\n  content: \"\\f111\";\n}\n\n.icon-codepen:before {\n  content: \"\\f112\";\n}\n\n.icon-coffee-bean:before {\n  content: \"\\f113\";\n}\n\n.icon-cplusplus:before {\n  content: \"\\f114\";\n}\n\n.icon-csharp:before {\n  content: \"\\f115\";\n}\n\n.icon-css:before {\n  content: \"\\f116\";\n}\n\n.icon-css3:before {\n  content: \"\\f117\";\n}\n\n.icon-css3-alt:before {\n  content: \"\\f118\";\n}\n\n.icon-d3:before {\n  content: \"\\f119\";\n}\n\n.icon-database:before {\n  content: \"\\f11a\";\n}\n\n.icon-database-alt:before {\n  content: \"\\f11b\";\n}\n\n.icon-database-alt2:before {\n  content: \"\\f11c\";\n}\n\n.icon-debian:before, .xo-icon-debian:before {\n  content: \"\\f11d\";\n}\n\n.icon-docker:before, .xo-icon-docker:before {\n  content: \"\\f11e\";\n}\n\n.icon-dreamhost:before {\n  content: \"\\f11f\";\n}\n\n.icon-elixir:before {\n  content: \"\\f120\";\n}\n\n.icon-elm:before {\n  content: \"\\f121\";\n}\n\n.icon-erlang:before {\n  content: \"\\f122\";\n}\n\n.icon-exherbo:before {\n  content: \"\\f123\";\n}\n\n.icon-fedora:before, .xo-icon-fedora:before {\n  content: \"\\f124\";\n}\n\n.icon-fire-alt:before {\n  content: \"\\f125\";\n}\n\n.icon-freebsd:before, .xo-icon-freebsd:before {\n  content: \"\\f126\";\n}\n\n.icon-freecodecamp:before {\n  content: \"\\f127\";\n}\n\n.icon-gentoo:before, .xo-icon-gentoo:before {\n  content: \"\\f128\";\n}\n\n.icon-ghost:before {\n  content: \"\\f129\";\n}\n\n.icon-git:before {\n  content: \"\\f12a\";\n}\n\n.icon-gnome:before {\n  content: \"\\f12b\";\n}\n\n.icon-go:before {\n  content: \"\\f12c\";\n}\n\n.icon-go-alt:before {\n  content: \"\\f12d\";\n}\n\n.icon-google:before {\n  content: \"\\f12e\";\n}\n\n.icon-google-alt:before {\n  content: \"\\f12f\";\n}\n\n.icon-google-code:before {\n  content: \"\\f130\";\n}\n\n.icon-google-developers:before {\n  content: \"\\f131\";\n}\n\n.icon-gradle:before {\n  content: \"\\f132\";\n}\n\n.icon-grails:before {\n  content: \"\\f133\";\n}\n\n.icon-grails-alt:before {\n  content: \"\\f134\";\n}\n\n.icon-grunt:before {\n  content: \"\\f135\";\n}\n\n.icon-gulp:before {\n  content: \"\\f136\";\n}\n\n.icon-gulp-alt:before {\n  content: \"\\f137\";\n}\n\n.icon-hadoop:before {\n  content: \"\\f138\";\n}\n\n.icon-haskell:before {\n  content: \"\\f139\";\n}\n\n.icon-heroku:before {\n  content: \"\\f13a\";\n}\n\n.icon-html:before {\n  content: \"\\f13b\";\n}\n\n.icon-html5:before {\n  content: \"\\f13c\";\n}\n\n.icon-html5-alt:before {\n  content: \"\\f13d\";\n}\n\n.icon-iphone:before {\n  content: \"\\f13e\";\n}\n\n.icon-java:before {\n  content: \"\\f13f\";\n}\n\n.icon-java-bold:before {\n  content: \"\\f140\";\n}\n\n.icon-java-duke:before {\n  content: \"\\f141\";\n}\n\n.icon-javascript:before {\n  content: \"\\f142\";\n}\n\n.icon-javascript-alt:before {\n  content: \"\\f143\";\n}\n\n.icon-jetty:before {\n  content: \"\\f144\";\n}\n\n.icon-jquery:before {\n  content: \"\\f145\";\n}\n\n.icon-kde:before {\n  content: \"\\f146\";\n}\n\n.icon-laravel:before {\n  content: \"\\f147\";\n}\n\n.icon-line-graph:before {\n  content: \"\\f148\";\n}\n\n.icon-linux-mint:before, .xo-icon-linux-mint:before {\n  content: \"\\f149\";\n}\n\n.icon-looking:before {\n  content: \"\\f14a\";\n}\n\n.icon-magento:before {\n  content: \"\\f14b\";\n}\n\n.icon-mariadb:before {\n  content: \"\\f14c\";\n}\n\n.icon-maven:before {\n  content: \"\\f14d\";\n}\n\n.icon-microscope:before {\n  content: \"\\f14e\";\n}\n\n.icon-mobile-device:before {\n  content: \"\\f14f\";\n}\n\n.icon-mobile-phone-alt:before {\n  content: \"\\f150\";\n}\n\n.icon-mobile-phone-broadcast:before {\n  content: \"\\f151\";\n}\n\n.icon-mongodb:before {\n  content: \"\\f152\";\n}\n\n.icon-mssql:before {\n  content: \"\\f153\";\n}\n\n.icon-mysql:before {\n  content: \"\\f154\";\n}\n\n.icon-mysql-alt:before {\n  content: \"\\f155\";\n}\n\n.icon-netbsd:before, .xo-icon-netbsd:before {\n  content: \"\\f156\";\n}\n\n.icon-nginx:before {\n  content: \"\\f157\";\n}\n\n.icon-nginx-alt:before {\n  content: \"\\f158\";\n}\n\n.icon-nginx-alt2:before {\n  content: \"\\f159\";\n}\n\n.icon-nodejs:before {\n  content: \"\\f15a\";\n}\n\n.icon-npm:before {\n  content: \"\\f15b\";\n}\n\n.icon-objc:before {\n  content: \"\\f15c\";\n}\n\n.icon-openshift:before {\n  content: \"\\f15d\";\n}\n\n.icon-oracle:before, .xo-icon-oracle:before {\n  content: \"\\f15e\";\n}\n\n.icon-oracle-alt:before {\n  content: \"\\f15f\";\n}\n\n.icon-osx:before, .xo-icon-osx:before {\n  content: \"\\f160\";\n}\n\n.icon-perl:before {\n  content: \"\\f161\";\n}\n\n.icon-phone-alt:before {\n  content: \"\\f162\";\n}\n\n.icon-phone-gap:before {\n  content: \"\\f163\";\n}\n\n.icon-phone-retro:before {\n  content: \"\\f164\";\n}\n\n.icon-php:before {\n  content: \"\\f165\";\n}\n\n.icon-php-alt:before {\n  content: \"\\f166\";\n}\n\n.icon-playframework:before {\n  content: \"\\f167\";\n}\n\n.icon-playframework-alt:before {\n  content: \"\\f168\";\n}\n\n.icon-plone:before {\n  content: \"\\f169\";\n}\n\n.icon-postgres:before {\n  content: \"\\f16a\";\n}\n\n.icon-postgres-alt:before {\n  content: \"\\f16b\";\n}\n\n.icon-python:before {\n  content: \"\\f16c\";\n}\n\n.icon-raspberrypi:before {\n  content: \"\\f16d\";\n}\n\n.icon-reactjs:before {\n  content: \"\\f16e\";\n}\n\n.icon-redhat:before, .xo-icon-redhat:before {\n  content: \"\\f16f\";\n}\n\n.icon-redis:before {\n  content: \"\\f170\";\n}\n\n.icon-ruby:before {\n  content: \"\\f171\";\n}\n\n.icon-ruby-on-rails:before {\n  content: \"\\f172\";\n}\n\n.icon-ruby-on-rails-alt:before {\n  content: \"\\f173\";\n}\n\n.icon-rust:before {\n  content: \"\\f174\";\n}\n\n.icon-sass:before {\n  content: \"\\f175\";\n}\n\n.icon-satellite:before {\n  content: \"\\f176\";\n}\n\n.icon-scala:before {\n  content: \"\\f177\";\n}\n\n.icon-scala-alt:before {\n  content: \"\\f178\";\n}\n\n.icon-script:before {\n  content: \"\\f179\";\n}\n\n.icon-script-alt:before {\n  content: \"\\f17a\";\n}\n\n.icon-shell:before {\n  content: \"\\f17b\";\n}\n\n.icon-sitefinity:before {\n  content: \"\\f17c\";\n}\n\n.icon-solaris:before, .xo-icon-solaris:before {\n  content: \"\\f17d\";\n}\n\n.icon-splatter:before {\n  content: \"\\f17e\";\n}\n\n.icon-spring:before {\n  content: \"\\f17f\";\n}\n\n.icon-suse:before, .xo-icon-suse:before {\n  content: \"\\f180\";\n}\n\n.icon-svg:before {\n  content: \"\\f181\";\n}\n\n.icon-symfony:before {\n  content: \"\\f182\";\n}\n\n.icon-tomcat:before {\n  content: \"\\f183\";\n}\n\n.icon-ubuntu:before, .xo-icon-ubuntu:before {\n  content: \"\\f184\";\n}\n\n.icon-unity:before {\n  content: \"\\f185\";\n}\n\n.icon-wireless:before {\n  content: \"\\f186\";\n}\n\n.icon-wordpress:before {\n  content: \"\\f187\";\n}\n\n.icon-x11:before {\n  content: \"\\f188\";\n}\n\n.ct-label {\n  fill: rgba(0, 0, 0, 0.4);\n  color: rgba(0, 0, 0, 0.4);\n  font-size: 0.75rem;\n  line-height: 1;\n}\n\n.ct-chart-line .ct-label,\n.ct-chart-bar .ct-label {\n  display: block;\n  display: -webkit-box;\n  display: -moz-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n}\n\n.ct-chart-pie .ct-label,\n.ct-chart-donut .ct-label {\n  dominant-baseline: central;\n}\n\n.ct-label.ct-horizontal.ct-start {\n  -webkit-box-align: flex-end;\n  -webkit-align-items: flex-end;\n  -ms-flex-align: flex-end;\n  align-items: flex-end;\n  -webkit-box-pack: flex-start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: flex-start;\n  justify-content: flex-start;\n  text-align: left;\n  text-anchor: start;\n}\n\n.ct-label.ct-horizontal.ct-end {\n  -webkit-box-align: flex-start;\n  -webkit-align-items: flex-start;\n  -ms-flex-align: flex-start;\n  align-items: flex-start;\n  -webkit-box-pack: flex-start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: flex-start;\n  justify-content: flex-start;\n  text-align: left;\n  text-anchor: start;\n}\n\n.ct-label.ct-vertical.ct-start {\n  -webkit-box-align: flex-end;\n  -webkit-align-items: flex-end;\n  -ms-flex-align: flex-end;\n  align-items: flex-end;\n  -webkit-box-pack: flex-end;\n  -webkit-justify-content: flex-end;\n  -ms-flex-pack: flex-end;\n  justify-content: flex-end;\n  text-align: right;\n  text-anchor: end;\n}\n\n.ct-label.ct-vertical.ct-end {\n  -webkit-box-align: flex-end;\n  -webkit-align-items: flex-end;\n  -ms-flex-align: flex-end;\n  align-items: flex-end;\n  -webkit-box-pack: flex-start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: flex-start;\n  justify-content: flex-start;\n  text-align: left;\n  text-anchor: start;\n}\n\n.ct-chart-bar .ct-label.ct-horizontal.ct-start {\n  -webkit-box-align: flex-end;\n  -webkit-align-items: flex-end;\n  -ms-flex-align: flex-end;\n  align-items: flex-end;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  text-align: center;\n  text-anchor: start;\n}\n\n.ct-chart-bar .ct-label.ct-horizontal.ct-end {\n  -webkit-box-align: flex-start;\n  -webkit-align-items: flex-start;\n  -ms-flex-align: flex-start;\n  align-items: flex-start;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  text-align: center;\n  text-anchor: start;\n}\n\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start {\n  -webkit-box-align: flex-end;\n  -webkit-align-items: flex-end;\n  -ms-flex-align: flex-end;\n  align-items: flex-end;\n  -webkit-box-pack: flex-start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: flex-start;\n  justify-content: flex-start;\n  text-align: left;\n  text-anchor: start;\n}\n\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end {\n  -webkit-box-align: flex-start;\n  -webkit-align-items: flex-start;\n  -ms-flex-align: flex-start;\n  align-items: flex-start;\n  -webkit-box-pack: flex-start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: flex-start;\n  justify-content: flex-start;\n  text-align: left;\n  text-anchor: start;\n}\n\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start {\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: flex-end;\n  -webkit-justify-content: flex-end;\n  -ms-flex-pack: flex-end;\n  justify-content: flex-end;\n  text-align: right;\n  text-anchor: end;\n}\n\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end {\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: flex-start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: flex-start;\n  justify-content: flex-start;\n  text-align: left;\n  text-anchor: end;\n}\n\n.ct-grid {\n  stroke: rgba(0, 0, 0, 0.2);\n  stroke-width: 1px;\n  stroke-dasharray: 2px;\n}\n\n.ct-grid-background {\n  fill: none;\n}\n\n.ct-point {\n  stroke-width: 10px;\n  stroke-linecap: round;\n}\n\n.ct-line {\n  fill: none;\n  stroke-width: 4px;\n}\n\n.ct-area {\n  stroke: none;\n  fill-opacity: 0.1;\n}\n\n.ct-bar {\n  fill: none;\n  stroke-width: 10px;\n}\n\n.ct-slice-donut {\n  fill: none;\n  stroke-width: 60px;\n}\n\n.ct-series-a .ct-point, .ct-series-a .ct-line, .ct-series-a .ct-bar, .ct-series-a .ct-slice-donut {\n  stroke: #089944;\n}\n.ct-series-a .ct-slice-pie, .ct-series-a .ct-area {\n  fill: #089944;\n}\n\n.ct-series-b .ct-point, .ct-series-b .ct-line, .ct-series-b .ct-bar, .ct-series-b .ct-slice-donut {\n  stroke: #366e98;\n}\n.ct-series-b .ct-slice-pie, .ct-series-b .ct-area {\n  fill: #366e98;\n}\n\n.ct-series-c .ct-point, .ct-series-c .ct-line, .ct-series-c .ct-bar, .ct-series-c .ct-slice-donut {\n  stroke: #f17cb0;\n}\n.ct-series-c .ct-slice-pie, .ct-series-c .ct-area {\n  fill: #f17cb0;\n}\n\n.ct-series-d .ct-point, .ct-series-d .ct-line, .ct-series-d .ct-bar, .ct-series-d .ct-slice-donut {\n  stroke: #86797d;\n}\n.ct-series-d .ct-slice-pie, .ct-series-d .ct-area {\n  fill: #86797d;\n}\n\n.ct-series-e .ct-point, .ct-series-e .ct-line, .ct-series-e .ct-bar, .ct-series-e .ct-slice-donut {\n  stroke: #b276b2;\n}\n.ct-series-e .ct-slice-pie, .ct-series-e .ct-area {\n  fill: #b276b2;\n}\n\n.ct-series-f .ct-point, .ct-series-f .ct-line, .ct-series-f .ct-bar, .ct-series-f .ct-slice-donut {\n  stroke: #f15854;\n}\n.ct-series-f .ct-slice-pie, .ct-series-f .ct-area {\n  fill: #f15854;\n}\n\n.ct-series-g .ct-point, .ct-series-g .ct-line, .ct-series-g .ct-bar, .ct-series-g .ct-slice-donut {\n  stroke: #b2912f;\n}\n.ct-series-g .ct-slice-pie, .ct-series-g .ct-area {\n  fill: #b2912f;\n}\n\n.ct-series-h .ct-point, .ct-series-h .ct-line, .ct-series-h .ct-bar, .ct-series-h .ct-slice-donut {\n  stroke: #decf3f;\n}\n.ct-series-h .ct-slice-pie, .ct-series-h .ct-area {\n  fill: #decf3f;\n}\n\n.ct-series-i .ct-point, .ct-series-i .ct-line, .ct-series-i .ct-bar, .ct-series-i .ct-slice-donut {\n  stroke: #dda458;\n}\n.ct-series-i .ct-slice-pie, .ct-series-i .ct-area {\n  fill: #dda458;\n}\n\n.ct-series-j .ct-point, .ct-series-j .ct-line, .ct-series-j .ct-bar, .ct-series-j .ct-slice-donut {\n  stroke: #60bd68;\n}\n.ct-series-j .ct-slice-pie, .ct-series-j .ct-area {\n  fill: #60bd68;\n}\n\n.ct-series-k .ct-point, .ct-series-k .ct-line, .ct-series-k .ct-bar, .ct-series-k .ct-slice-donut {\n  stroke: #4d4d4d;\n}\n.ct-series-k .ct-slice-pie, .ct-series-k .ct-area {\n  fill: #4d4d4d;\n}\n\n.ct-series-l .ct-point, .ct-series-l .ct-line, .ct-series-l .ct-bar, .ct-series-l .ct-slice-donut {\n  stroke: #eacf7d;\n}\n.ct-series-l .ct-slice-pie, .ct-series-l .ct-area {\n  fill: #eacf7d;\n}\n\n.ct-series-m .ct-point, .ct-series-m .ct-line, .ct-series-m .ct-bar, .ct-series-m .ct-slice-donut {\n  stroke: #b2c326;\n}\n.ct-series-m .ct-slice-pie, .ct-series-m .ct-area {\n  fill: #b2c326;\n}\n\n.ct-series-n .ct-point, .ct-series-n .ct-line, .ct-series-n .ct-bar, .ct-series-n .ct-slice-donut {\n  stroke: #6188e2;\n}\n.ct-series-n .ct-slice-pie, .ct-series-n .ct-area {\n  fill: #6188e2;\n}\n\n.ct-series-o .ct-point, .ct-series-o .ct-line, .ct-series-o .ct-bar, .ct-series-o .ct-slice-donut {\n  stroke: #a748ca;\n}\n.ct-series-o .ct-slice-pie, .ct-series-o .ct-area {\n  fill: #a748ca;\n}\n\n.ct-square {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-square:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 100%;\n}\n.ct-square:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-square > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-minor-second {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-minor-second:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 93.75%;\n}\n.ct-minor-second:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-minor-second > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-major-second {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-major-second:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 88.8888888889%;\n}\n.ct-major-second:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-major-second > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-minor-third {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-minor-third:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 83.3333333333%;\n}\n.ct-minor-third:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-minor-third > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-major-third {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-major-third:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 80%;\n}\n.ct-major-third:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-major-third > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-perfect-fourth {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-perfect-fourth:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 75%;\n}\n.ct-perfect-fourth:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-perfect-fourth > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-perfect-fifth {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-perfect-fifth:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 66.6666666667%;\n}\n.ct-perfect-fifth:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-perfect-fifth > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-minor-sixth {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-minor-sixth:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 62.5%;\n}\n.ct-minor-sixth:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-minor-sixth > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-golden-section {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-golden-section:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 61.804697157%;\n}\n.ct-golden-section:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-golden-section > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-major-sixth {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-major-sixth:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 60%;\n}\n.ct-major-sixth:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-major-sixth > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-minor-seventh {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-minor-seventh:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 56.25%;\n}\n.ct-minor-seventh:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-minor-seventh > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-major-seventh {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-major-seventh:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 53.3333333333%;\n}\n.ct-major-seventh:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-major-seventh > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-octave {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-octave:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 50%;\n}\n.ct-octave:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-octave > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-major-tenth {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-major-tenth:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 40%;\n}\n.ct-major-tenth:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-major-tenth > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-major-eleventh {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-major-eleventh:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 37.5%;\n}\n.ct-major-eleventh:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-major-eleventh > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-major-twelfth {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-major-twelfth:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 33.3333333333%;\n}\n.ct-major-twelfth:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-major-twelfth > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-double-octave {\n  display: block;\n  position: relative;\n  width: 100%;\n}\n.ct-double-octave:before {\n  display: block;\n  float: left;\n  content: \"\";\n  width: 0;\n  height: 0;\n  padding-bottom: 25%;\n}\n.ct-double-octave:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.ct-double-octave > svg {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.ct-chart {\n  display: flex;\n  flex-direction: column-reverse;\n}\n\n.dashboardItem .ct-chart {\n  height: 150px;\n}\n\n.ct-line {\n  stroke-width: 2px;\n}\n\n.ct-bar {\n  stroke-width: 10%;\n}\n\n.ct-point {\n  stroke-width: 30px;\n  stroke-opacity: 0 !important;\n}\n\n.ct-point:hover {\n  stroke-opacity: 0.2 !important;\n  stroke-width: 20px;\n}\n\n.ct-tooltip {\n  position: absolute;\n  display: inline-block;\n  min-width: 5em;\n  padding: 8px 10px;\n  background: #383838;\n  color: #fff;\n  text-align: center;\n  pointer-events: none;\n  z-index: 10;\n  font-weight: 700;\n}\n.ct-tooltip:before {\n  bottom: -14px;\n  top: 100%;\n  left: 50%;\n  border: solid transparent;\n  content: \"\";\n  height: 0;\n  width: 0;\n  pointer-events: none;\n  border-color: rgba(251, 249, 228, 0);\n  border-top-color: #383838;\n  border-width: 7px;\n  margin-left: -8px;\n}\n.ct-tooltip.hide {\n  display: block;\n  opacity: 0;\n  visibility: hidden;\n}\n\n.ct-legend {\n  bottom: 0;\n  margin-bottom: -1em;\n}\n.ct-legend li {\n  position: relative;\n  padding-left: 0.5em;\n  list-style-type: none;\n  display: inline-block;\n  margin-right: 0.5em;\n  font-size: 0.8em;\n}\n.ct-legend li:before {\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  left: 0;\n  content: \"\";\n  border: 3px solid transparent;\n  border-radius: 2px;\n  margin-right: 0.2em;\n}\n.ct-legend li.inactive:before {\n  background: transparent;\n}\n.ct-legend.ct-legend-inside {\n  position: absolute;\n  top: 0;\n  right: 0;\n}\n.ct-legend .ct-series-0:before {\n  background-color: #089944;\n  border-color: #089944;\n}\n.ct-legend .ct-series-1:before {\n  background-color: #366e98;\n  border-color: #366e98;\n}\n.ct-legend .ct-series-2:before {\n  background-color: #f17cb0;\n  border-color: #f17cb0;\n}\n.ct-legend .ct-series-3:before {\n  background-color: #86797d;\n  border-color: #86797d;\n}\n.ct-legend .ct-series-4:before {\n  background-color: #b276b2;\n  border-color: #b276b2;\n}\n.ct-legend .ct-series-5:before {\n  background-color: #f15854;\n  border-color: #f15854;\n}\n.ct-legend .ct-series-6:before {\n  background-color: #b2912f;\n  border-color: #b2912f;\n}\n.ct-legend .ct-series-7:before {\n  background-color: #decf3f;\n  border-color: #decf3f;\n}\n.ct-legend .ct-series-8:before {\n  background-color: #dda458;\n  border-color: #dda458;\n}\n.ct-legend .ct-series-9:before {\n  background-color: #60bd68;\n  border-color: #60bd68;\n}\n.ct-legend .ct-series-10:before {\n  background-color: #4d4d4d;\n  border-color: #4d4d4d;\n}\n.ct-legend .ct-series-11:before {\n  background-color: #eacf7d;\n  border-color: #eacf7d;\n}\n.ct-legend .ct-series-12:before {\n  background-color: #b2c326;\n  border-color: #b2c326;\n}\n.ct-legend .ct-series-13:before {\n  background-color: #6188e2;\n  border-color: #6188e2;\n}\n.ct-legend .ct-series-14:before {\n  background-color: #a748ca;\n  border-color: #a748ca;\n}\n\nmeter {\n  /* For Firefox */\n  background: #eee;\n  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.2) inset;\n  border-radius: 3px;\n}\n\nmeter::-webkit-meter-bar {\n  background: #eee;\n  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.2) inset;\n  border-radius: 3px;\n}\n\nmeter::-webkit-meter-optimum-value {\n  background: #089944;\n  border-radius: 3px;\n}\n\nmeter::-webkit-meter-suboptimum-value {\n  background: #eca649;\n  border-radius: 3px;\n}\n\nmeter::-webkit-meter-even-less-good-value {\n  background: #990822;\n  border-radius: 3px;\n}\n\nmeter::-moz-meter-bar {\n  border-radius: 3px;\n}\n\nmeter:-moz-meter-optimum::-moz-meter-bar {\n  background: #089944;\n}\n\nmeter:-moz-meter-sub-optimum::-moz-meter-bar {\n  background: #eca649;\n}\n\nmeter:-moz-meter-sub-sub-optimum::-moz-meter-bar {\n  background: #990822;\n}\n\n.xo-icon-nav {\n  color: #ccc;\n}\n.usage {\n  background-color: #eee;\n  height: 2em;\n  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25) inset;\n  margin-top: 1em;\n  margin-bottom: 2em;\n}\n\n.usage-element {\n  background-color: #5cb85c;\n  box-shadow: -1px 0 0 0 white;\n  height: 2em;\n  display: inline-block;\n  transition: all 0.3s ease 0s;\n}\n\n.usage-element-highlight {\n  background-color: #eca649;\n}\n\n.usage-element-others {\n  background-color: rgba(92, 184, 92, 0.4588235294);\n}\n\n.usage-element:hover {\n  opacity: 0.6;\n}\n\n.limits {\n  background-color: #eee;\n  height: 1.1em;\n  width: 100%;\n  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25) inset;\n}\n\n.limits-element, .limits-over-used, .limits-to-be-used, .limits-used {\n  background-color: #5cb85c;\n  height: 100%;\n  display: inline-block;\n  transition: all 0.3s ease 0s;\n}\n\n.limits-used {\n  background-color: #366e98;\n}\n\n.limits-to-be-used {\n  background-color: #089944;\n}\n\n.limits-over-used {\n  background-color: #990822;\n}\n\n@media (max-width: 991px) {\n  html {\n    font-size: 1.5vw;\n  }\n}\n@media (max-width: 767px) {\n  html {\n    font-size: 3vmin;\n  }\n}\n@media (max-width: 575px) {\n  html {\n    font-size: 2.95vmin;\n  }\n}\n/* Collection default theme */\n/* Grid default theme */\n/* Table default theme */\n.ReactVirtualized__Table__headerRow {\n  font-weight: 700;\n  text-transform: uppercase;\n  display: -webkit-box;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  flex-direction: row;\n  -webkit-box-align: center;\n  align-items: center;\n}\n\n.ReactVirtualized__Table__row {\n  display: -webkit-box;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  flex-direction: row;\n  -webkit-box-align: center;\n  align-items: center;\n}\n\n.ReactVirtualized__Table__headerTruncatedText {\n  display: inline-block;\n  max-width: 100%;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n\n.ReactVirtualized__Table__headerColumn,\n.ReactVirtualized__Table__rowColumn {\n  margin-right: 10px;\n  min-width: 0px;\n}\n\n.ReactVirtualized__Table__rowColumn {\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.ReactVirtualized__Table__headerColumn:first-of-type,\n.ReactVirtualized__Table__rowColumn:first-of-type {\n  margin-left: 10px;\n}\n\n.ReactVirtualized__Table__sortableHeaderColumn {\n  cursor: pointer;\n}\n\n.ReactVirtualized__Table__sortableHeaderIconContainer {\n  display: -webkit-box;\n  display: flex;\n  -webkit-box-align: center;\n  align-items: center;\n}\n\n.ReactVirtualized__Table__sortableHeaderIcon {\n  -webkit-box-flex: 0;\n  flex: 0 0 24px;\n  height: 1em;\n  width: 1em;\n  fill: currentColor;\n}\n\n/* List default theme */\n\n/**\n * React Select\n * ============\n * Created by Jed Watson and Joss Mackison for KeystoneJS, http://www.keystonejs.com/\n * https://twitter.com/jedwatson https://twitter.com/jossmackison https://twitter.com/keystonejs\n * MIT License: https://github.com/JedWatson/react-select\n*/\n@keyframes Select-animation-spin {\n  to {\n    transform: rotate(1turn);\n  }\n}\n@-webkit-keyframes Select-animation-spin {\n  to {\n    -webkit-transform: rotate(1turn);\n  }\n}\n.Select {\n  position: relative;\n}\n.Select input::-webkit-contacts-auto-fill-button,\n.Select input::-webkit-credentials-auto-fill-button {\n  display: none !important;\n}\n.Select input::-ms-clear {\n  display: none !important;\n}\n.Select input::-ms-reveal {\n  display: none !important;\n}\n.Select, .Select div, .Select input, .Select span {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.Select.is-disabled .Select-arrow-zone {\n  cursor: default;\n  pointer-events: none;\n}\n.Select.is-disabled > .Select-control {\n  background-color: #f9f9f9;\n}\n.Select.is-disabled > .Select-control:hover {\n  box-shadow: none;\n}\n.Select.is-searchable.is-open > .Select-control {\n  cursor: text;\n}\n.Select.is-searchable.is-focused:not(.is-open) > .Select-control {\n  cursor: text;\n}\n.Select.is-open > .Select-control {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  background: #fff;\n  border-color: rgb(178.5, 178.5, 178.5) #ccc rgb(216.75, 216.75, 216.75);\n}\n.Select.is-open > .Select-control .Select-arrow {\n  top: -2px;\n  border-color: transparent transparent #999;\n  border-width: 0 5px 5px;\n}\n.Select.is-focused > .Select-control {\n  background: #fff;\n}\n.Select.is-focused:not(.is-open) > .Select-control {\n  border-color: #08c rgb(0, 153, 229.5) rgb(0, 153, 229.5);\n  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 0 5px -1px fade(#08c, 50%);\n}\n.Select.has-value.is-clearable.Select--single > .Select-control .Select-value {\n  padding-right: 44px;\n}\n.Select.has-value.Select--single > .Select-control .Select-value .Select-value-label, .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value .Select-value-label {\n  color: #333;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label, .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label {\n  cursor: pointer;\n  text-decoration: none;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:hover, .Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus, .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:hover, .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus {\n  color: #08c;\n  outline: none;\n  text-decoration: underline;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus, .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus {\n  background: #fff;\n}\n.Select.has-value.is-pseudo-focused .Select-input {\n  opacity: 0;\n}\n.Select.is-open .Select-arrow,\n.Select .Select-arrow-zone:hover > .Select-arrow {\n  border-top-color: #666;\n}\n.Select.Select--rtl {\n  direction: rtl;\n  text-align: right;\n}\n\n.Select-control {\n  background-color: #fff;\n  border-color: rgb(216.75, 216.75, 216.75) #ccc rgb(178.5, 178.5, 178.5);\n  border-radius: 4px;\n  border: 1px solid #ccc;\n  color: #333;\n  cursor: default;\n  display: table;\n  border-spacing: 0;\n  border-collapse: separate;\n  height: 40px;\n  outline: none;\n  overflow: hidden;\n  position: relative;\n  width: 100%;\n}\n.Select-control:hover {\n  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);\n}\n.Select-control .Select-input:focus {\n  outline: none;\n  background: #fff;\n}\n\n.Select-placeholder,\n.Select--single > .Select-control .Select-value {\n  bottom: 0;\n  color: #aaa;\n  left: 0;\n  line-height: 38px;\n  padding-left: 10px;\n  padding-right: 10px;\n  position: absolute;\n  right: 0;\n  top: 0;\n  max-width: 100%;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.Select-input {\n  height: 38px;\n  padding-left: 10px;\n  padding-right: 10px;\n  vertical-align: middle;\n}\n.Select-input > input {\n  width: 100%;\n  background: none transparent;\n  border: 0 none;\n  box-shadow: none;\n  cursor: default;\n  display: inline-block;\n  font-family: inherit;\n  font-size: inherit;\n  margin: 0;\n  outline: none;\n  line-height: 17px; /* For IE 8 compatibility */\n  padding: 10px 0 14px; /* For IE 8 compatibility */\n  -webkit-appearance: none;\n}\n.is-focused .Select-input > input {\n  cursor: text;\n}\n\n.Select-control:not(.is-searchable) > .Select-input {\n  outline: none;\n}\n\n.Select-loading-zone {\n  cursor: pointer;\n  display: table-cell;\n  position: relative;\n  text-align: center;\n  vertical-align: middle;\n  width: 16px;\n}\n\n.Select-loading {\n  -webkit-animation: Select-animation-spin 400ms infinite linear;\n  -o-animation: Select-animation-spin 400ms infinite linear;\n  animation: Select-animation-spin 400ms infinite linear;\n  width: 16px;\n  height: 16px;\n  box-sizing: border-box;\n  border-radius: 50%;\n  border: 2px solid #ccc;\n  border-right-color: #333;\n  display: inline-block;\n  position: relative;\n  vertical-align: middle;\n}\n\n.Select-clear-zone {\n  -webkit-animation: Select-animation-fadeIn 200ms;\n  -o-animation: Select-animation-fadeIn 200ms;\n  animation: Select-animation-fadeIn 200ms;\n  color: #999;\n  cursor: pointer;\n  display: table-cell;\n  position: relative;\n  text-align: center;\n  vertical-align: middle;\n  width: 19px;\n}\n.Select-clear-zone:hover {\n  color: #D0021B;\n}\n\n.Select-clear {\n  display: inline-block;\n  font-size: 20px;\n  line-height: 1;\n}\n\n.Select--multi .Select-clear-zone {\n  width: 19px;\n}\n\n.Select--multi .Select-multi-value-wrapper {\n  display: inline-block;\n}\n\n.Select .Select-aria-only {\n  position: absolute;\n  display: inline-block;\n  height: 1px;\n  width: 1px;\n  margin: -1px;\n  clip: rect(0, 0, 0, 0);\n  overflow: hidden;\n  float: left;\n}\n\n.Select-arrow-zone {\n  cursor: pointer;\n  display: table-cell;\n  position: relative;\n  text-align: center;\n  vertical-align: middle;\n  width: 25px;\n  padding-right: 5px;\n}\n.Select--rtl .Select-arrow-zone {\n  padding-right: 0;\n  padding-left: 5px;\n}\n\n.Select-arrow {\n  border-color: #999 transparent transparent;\n  border-style: solid;\n  border-width: 5px 5px 2.5px;\n  display: inline-block;\n  height: 0;\n  width: 0;\n  position: relative;\n}\n\n@-webkit-keyframes Select-animation-fadeIn {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n@keyframes Select-animation-fadeIn {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n.Select-menu-outer {\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  border-top-color: rgb(229.5, 229.5, 229.5);\n  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);\n  box-sizing: border-box;\n  margin-top: -1px;\n  max-height: 200px;\n  position: absolute;\n  left: 0;\n  top: 100%;\n  width: 100%;\n  z-index: 1000;\n  -webkit-overflow-scrolling: touch;\n}\n\n.Select-menu {\n  max-height: 198px;\n  overflow-y: auto;\n}\n\n.Select-option {\n  box-sizing: border-box;\n  background-color: #fff;\n  color: #666666;\n  cursor: pointer;\n  display: block;\n  padding: 8px 10px;\n}\n.Select-option:last-child {\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.Select-option.is-selected {\n  background-color: #f5faff;\n  color: #333;\n}\n.Select-option.is-focused {\n  background-color: #f2f9fc;\n  color: #333;\n}\n.Select-option.is-disabled {\n  color: #cccccc;\n  cursor: default;\n}\n\n.Select-noresults {\n  box-sizing: border-box;\n  color: #999999;\n  cursor: default;\n  display: block;\n  padding: 8px 10px;\n}\n\n.Select--multi .Select-input {\n  vertical-align: middle;\n  margin-left: 10px;\n  padding: 0;\n}\n.Select--multi.Select--rtl .Select-input {\n  margin-left: 0;\n  margin-right: 10px;\n}\n.Select--multi.has-value .Select-input {\n  margin-left: 5px;\n}\n.Select--multi .Select-value {\n  background-color: #f2f9fc;\n  border-radius: 2px;\n  border: 1px solid rgb(200.5625, 229.875, 242.4375);\n  color: #08c;\n  display: inline-block;\n  font-size: 0.9em;\n  margin-left: 5px;\n  margin-top: 5px;\n  vertical-align: top;\n}\n.Select--multi .Select-value-icon,\n.Select--multi .Select-value-label {\n  display: inline-block;\n  vertical-align: middle;\n}\n.Select--multi .Select-value-label {\n  border-bottom-right-radius: 2px;\n  border-top-right-radius: 2px;\n  cursor: default;\n  padding: 2px 5px;\n}\n.Select--multi a.Select-value-label {\n  color: #08c;\n  cursor: pointer;\n  text-decoration: none;\n}\n.Select--multi a.Select-value-label:hover {\n  text-decoration: underline;\n}\n.Select--multi .Select-value-icon {\n  cursor: pointer;\n  border-bottom-left-radius: 2px;\n  border-top-left-radius: 2px;\n  border-right: 1px solid rgb(200.5625, 229.875, 242.4375);\n  padding: 1px 5px 3px;\n}\n.Select--multi .Select-value-icon:hover, .Select--multi .Select-value-icon:focus {\n  background-color: rgb(221.28125, 239.4375, 247.21875);\n  color: rgb(0, 119, 178.5);\n}\n.Select--multi .Select-value-icon:active {\n  background-color: rgb(200.5625, 229.875, 242.4375);\n}\n.Select--multi.Select--rtl .Select-value {\n  margin-left: 0;\n  margin-right: 5px;\n}\n.Select--multi.Select--rtl .Select-value-icon {\n  border-right: none;\n  border-left: 1px solid rgb(200.5625, 229.875, 242.4375);\n}\n\n.Select--multi.is-disabled .Select-value {\n  background-color: #fcfcfc;\n  border: 1px solid rgb(226.5, 226.5, 226.5);\n  color: #333;\n}\n.Select--multi.is-disabled .Select-value-icon {\n  cursor: not-allowed;\n  border-right: 1px solid rgb(226.5, 226.5, 226.5);\n}\n.Select--multi.is-disabled .Select-value-icon:hover, .Select--multi.is-disabled .Select-value-icon:focus, .Select--multi.is-disabled .Select-value-icon:active {\n  background-color: #fcfcfc;\n}\n\n@keyframes Select-animation-spin {\n  to {\n    transform: rotate(1turn);\n  }\n}\n@-webkit-keyframes Select-animation-spin {\n  to {\n    -webkit-transform: rotate(1turn);\n  }\n}\n.is-searchable {\n  width: 100%;\n}\n\n.Select-value-label {\n  color: #373a3c;\n}\n\n.Select-control {\n  border-radius: unset;\n}\n\n.Select-menu-outer .Select-option.is-disabled {\n  cursor: default;\n  font-weight: bold;\n  color: #777;\n}\n\n.Select-placeholder {\n  color: #999;\n}\n\n.Select--single > .Select-control .Select-value {\n  color: #333;\n}\n\n.d-inline-flex {\n  display: inline-flex;\n}\n\n.d-flex {\n  display: flex;\n}\n\n.align-self-center {\n  align-self: center;\n}\n\n.justify-content-end {\n  justify-content: flex-end;\n}\n\n.header-title {\n  margin-bottom: 1em;\n}\n\n.nav-tabs {\n  font-size: 1.2em;\n}\n\n.btn-huge {\n  font-size: 4em;\n}\n\n.console {\n  margin-top: 1em;\n  text-align: center;\n}\n\n.tag-ip {\n  margin-left: 1em;\n}\n\n.xo-menu,\n.xo-sub-menu {\n  background: #044b7f;\n  color: white;\n}\n\n.xo-menu a {\n  color: inherit;\n}\n.xo-menu button {\n  background-color: inherit;\n  color: inherit;\n}\n\n.xo-menu-item {\n  min-width: 100%;\n  position: relative;\n  width: max-content;\n}\n.xo-menu-item:hover {\n  background-color: #366e98;\n  color: white;\n}\n\n.xo-sub-menu {\n  left: 100%;\n  opacity: 0;\n  position: absolute;\n  top: 0;\n  transition: opacity 0.3s;\n  visibility: hidden;\n  width: max-content;\n  z-index: 1000;\n}\n\n.xo-menu-item:hover > .xo-sub-menu {\n  opacity: 1;\n  visibility: visible;\n}\n\n.page-header {\n  background: #eceeef;\n}\n\n.notify-container {\n  align-content: flex-start;\n  align-items: flex-start;\n  display: flex;\n  flex-direction: column;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  position: absolute;\n  right: 10px;\n  top: 10px;\n}\n\n.notify-item {\n  border-radius: 5px;\n  border: 1px solid black;\n  margin: 5px 10px;\n  width: 250px;\n  z-index: 3;\n}\n.notify-item.success {\n  background: #dff0d8;\n  border-color: rgb(207.8888888889, 232.9166666667, 197.5833333333);\n  color: #3c763d;\n}\n.notify-item.info {\n  background: #d9edf7;\n  border-color: rgb(187.5086956522, 223.0304347826, 240.7913043478);\n  color: #31708f;\n}\n.notify-item.error {\n  background: #f2dede;\n  border-color: rgb(234.7934782609, 203.7065217391, 203.7065217391);\n  color: #a94442;\n}\n\n.notify-item > p {\n  margin: 10px;\n}\n\n.notify-title {\n  font-weight: 700;\n}\n\n.no-text-selection {\n  cursor: not-allowed;\n  -moz-user-select: none; /* Firefox */\n  user-select: none; /* Chrome */\n}\n\n.message-expandable {\n  cursor: pointer;\n}\n.message-expandable span {\n  text-decoration: underline;\n}\n\n.task-info,\n.task-warning {\n  padding: 2px 10px;\n  margin: 10px 0;\n  list-style-type: none;\n  border-radius: 10px;\n  border: 1px dashed #eca649;\n}\n.task-info li,\n.task-warning li {\n  margin-bottom: 10px;\n}\n.task-info li:last-child,\n.task-warning li:last-child {\n  margin-bottom: 0;\n}\n.task-info li strong,\n.task-warning li strong {\n  display: block;\n  color: #eca649;\n}\n.task-info li span,\n.task-warning li span {\n  color: grey;\n}","//\n// Progress animations\n//\n\n@keyframes progress-bar-stripes {\n  from { background-position: $spacer-y 0; }\n  to { background-position: 0 0; }\n}\n\n\n//\n// Basic progress bar\n//\n\n.progress {\n  display: block;\n  width: 100%;\n  height: $spacer-y; // todo: make a new var for this\n  margin-bottom: $spacer-y;\n}\n.progress[value] {\n  // Set overall background\n  background-color: $progress-bg;\n  // Remove Firefox and Opera border\n  border: 0;\n  // Reset the default appearance\n  appearance: none;\n  // Set overall border radius\n  @include border-radius($progress-border-radius);\n}\n\n// Filled-in portion of the bar\n.progress[value]::-ms-fill {\n  background-color: $progress-bar-color;\n  // Remove right-hand border of value bar from IE10+/Edge\n  border: 0;\n}\n.progress[value]::-moz-progress-bar {\n  background-color: $progress-bar-color;\n  @include border-left-radius($progress-border-radius);\n}\n.progress[value]::-webkit-progress-value {\n  background-color: $progress-bar-color;\n  @include border-left-radius($progress-border-radius);\n}\n// Tweaks for full progress bar\n.progress[value=\"100\"]::-moz-progress-bar {\n  @include border-right-radius($progress-border-radius);\n}\n.progress[value=\"100\"]::-webkit-progress-value {\n  @include border-right-radius($progress-border-radius);\n}\n\n// Unfilled portion of the bar\n.progress[value]::-webkit-progress-bar {\n  background-color: $progress-bg;\n  @include border-radius($progress-border-radius);\n  @include box-shadow($progress-box-shadow);\n}\nbase::-moz-progress-bar, // Absurd-but-syntactically-valid selector to make these styles Firefox-only\n.progress[value] {\n  background-color: $progress-bg;\n  @include border-radius($progress-border-radius);\n  @include box-shadow($progress-box-shadow);\n}\n\n// IE9 hacks to accompany custom markup. We don't need to scope this via media queries, but I feel better doing it anyway.\n@media screen and (min-width:0\\0) {\n  .progress {\n    background-color: $progress-bg;\n    @include border-radius($progress-border-radius);\n    @include box-shadow($progress-box-shadow);\n  }\n  .progress-bar {\n    display: inline-block;\n    height: $spacer-y;\n    text-indent: -999rem; // Simulate hiding of value as in native `<progress>`\n    background-color: $progress-bar-color;\n    @include border-left-radius($progress-border-radius);\n  }\n  .progress[width=\"100%\"] {\n    @include border-right-radius($progress-border-radius);\n  }\n}\n\n\n//\n// Striped\n//\n\n.progress-striped[value]::-webkit-progress-value {\n  @include gradient-striped();\n  background-size: $spacer-y $spacer-y;\n}\n.progress-striped[value]::-moz-progress-bar {\n  @include gradient-striped();\n  background-size: $spacer-y $spacer-y;\n}\n.progress-striped[value]::-ms-fill {\n  @include gradient-striped();\n  background-size: $spacer-y $spacer-y;\n}\n// IE9\n@media screen and (min-width:0\\0) {\n  .progress-bar-striped {\n    @include gradient-striped();\n    background-size: $spacer-y $spacer-y;\n  }\n}\n\n\n//\n// Animated\n//\n\n.progress-animated[value]::-webkit-progress-value {\n  animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-animated[value]::-moz-progress-bar {\n  animation: progress-bar-stripes 2s linear infinite;\n}\n// IE9\n@media screen and (min-width:0\\0) {\n  .progress-animated .progress-bar-striped {\n    animation: progress-bar-stripes 2s linear infinite;\n  }\n}\n\n\n//\n// Variations\n//\n\n.progress-success {\n  @include progress-variant($progress-bar-success-bg);\n}\n.progress-info {\n  @include progress-variant($progress-bar-info-bg);\n}\n.progress-warning {\n  @include progress-variant($progress-bar-warning-bg);\n}\n.progress-danger {\n  @include progress-variant($progress-bar-danger-bg);\n}\n","/*! normalize.css v4.2.0 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Change the default font family in all browsers (opinionated).\n// 2. Correct the line height in all browsers.\n// 3. Prevent adjustments of font size after orientation changes in IE and iOS.\n//\n\nhtml {\n  font-family: sans-serif; // 1\n  line-height: 1.15; // 2\n  -ms-text-size-adjust: 100%; // 3\n  -webkit-text-size-adjust: 100%; // 3\n}\n\n//\n// Remove the margin in all browsers (opinionated).\n//\n\nbody {\n  margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Add the correct display in IE 9-.\n// 1. Add the correct display in Edge, IE, and Firefox.\n// 2. Add the correct display in IE.\n//\n\narticle,\naside,\ndetails, // 1\nfigcaption,\nfigure,\nfooter,\nheader,\nmain, // 2\nmenu,\nnav,\nsection,\nsummary { // 1\n  display: block;\n}\n\n//\n// Add the correct display in IE 9-.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n}\n\n//\n// Add the correct display in iOS 4-7.\n//\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n//\n\nprogress {\n  vertical-align: baseline;\n}\n\n//\n// Add the correct display in IE 10-.\n// 1. Add the correct display in IE.\n//\n\ntemplate, // 1\n[hidden] {\n  display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// 1. Remove the gray background on active links in IE 10.\n// 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n//\n\na {\n  background-color: transparent; // 1\n  -webkit-text-decoration-skip: objects; // 2\n}\n\n//\n// Remove the outline on focused links when they are also active or hovered\n// in all browsers (opinionated).\n//\n\na:active,\na:hover {\n  outline-width: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// 1. Remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n//\n\nabbr[title] {\n  border-bottom: none; // 1\n  text-decoration: underline; // 2\n  text-decoration: underline dotted; // 2\n}\n\n//\n// Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n//\n\nb,\nstrong {\n  font-weight: inherit;\n}\n\n//\n// Add the correct font weight in Chrome, Edge, and Safari.\n//\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n//\n// Add the correct font style in Android 4.3-.\n//\n\ndfn {\n  font-style: italic;\n}\n\n//\n// Correct the font size and margin on `h1` elements within `section` and\n// `article` contexts in Chrome, Firefox, and Safari.\n//\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n//\n// Add the correct background and color in IE 9-.\n//\n\nmark {\n  background-color: #ff0;\n  color: #000;\n}\n\n//\n// Add the correct font size in all browsers.\n//\n\nsmall {\n  font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove the border on images inside links in IE 10-.\n//\n\nimg {\n  border-style: none;\n}\n\n//\n// Hide the overflow in IE.\n//\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// 1. Correct the inheritance and scaling of font size in all browsers.\n// 2. Correct the odd `em` font sizing in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace; // 1\n  font-size: 1em; // 2\n}\n\n//\n// Add the correct margin in IE 8.\n//\n\nfigure {\n  margin: 1em 40px;\n}\n\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n//\n\nhr {\n  box-sizing: content-box; // 1\n  height: 0; // 1\n  overflow: visible; // 2\n}\n\n// Forms\n// ==========================================================================\n\n//\n// 1. Change font properties to `inherit` in all browsers (opinionated).\n// 2. Remove the margin in Firefox and Safari.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font: inherit; // 1\n  margin: 0; // 2\n}\n\n//\n// Restore the font weight unset by the previous rule.\n//\n\noptgroup {\n  font-weight: bold;\n}\n\n//\n// Show the overflow in IE.\n// 1. Show the overflow in Edge.\n//\n\nbutton,\ninput { // 1\n  overflow: visible;\n}\n\n//\n// Remove the inheritance of text transform in Edge, Firefox, and IE.\n// 1. Remove the inheritance of text transform in Firefox.\n//\n\nbutton,\nselect { // 1\n  text-transform: none;\n}\n\n//\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n//    controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n//\n\nbutton,\nhtml [type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n}\n\n//\n// Remove the inner border and padding in Firefox.\n//\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n//\n// Restore the focus styles unset by the previous rule.\n//\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n//\n// Change the border, margin, and padding in all browsers (opinionated).\n//\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\n// 3. Remove the padding so developers are not caught out when they zero out\n//    `fieldset` elements in all browsers.\n//\n\nlegend {\n  box-sizing: border-box; // 1\n  color: inherit; // 2\n  display: table; // 1\n  max-width: 100%; // 1\n  padding: 0; // 3\n  white-space: normal; // 1\n}\n\n//\n// Remove the default vertical scrollbar in IE.\n//\n\ntextarea {\n  overflow: auto;\n}\n\n//\n// 1. Add the correct box sizing in IE 10-.\n// 2. Remove the padding in IE 10-.\n//\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n  box-sizing: border-box; // 1\n  padding: 0; // 2\n}\n\n//\n// Correct the cursor style of increment and decrement buttons in Chrome.\n//\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n//\n// 1. Correct the odd appearance in Chrome and Safari.\n// 2. Correct the outline style in Safari.\n//\n\n[type=\"search\"] {\n  -webkit-appearance: textfield; // 1\n  outline-offset: -2px; // 2\n}\n\n//\n// Remove the inner padding and cancel buttons in Chrome and Safari on OS X.\n//\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n//\n// Correct the text style of placeholders in Chrome, Edge, and Safari.\n//\n\n::-webkit-input-placeholder {\n  color: inherit;\n  opacity: 0.54;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; // 1\n  font: inherit; // 2\n}\n","// scss-lint:disable QualifyingElement, DuplicateProperty\n\n// Reboot\n//\n// Global resets to common HTML elements and more for easier usage by Bootstrap.\n// Adds additional rules on top of Normalize.css, including several overrides.\n\n\n// Reset the box-sizing\n//\n// Change from `box-sizing: content-box` to `border-box` so that when you add\n// `padding` or `border`s to an element, the overall declared `width` does not\n// change. For example, `width: 100px;` will always be `100px` despite the\n// `border: 10px solid red;` and `padding: 20px;`.\n//\n// Heads up! This reset may cause conflicts with some third-party widgets. For\n// recommendations on resolving such conflicts, see\n// https://getbootstrap.com/getting-started/#third-box-sizing.\n//\n// Credit: https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/\n\nhtml {\n  box-sizing: border-box;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: inherit;\n}\n\n\n// Make viewport responsive\n//\n// @viewport is needed because IE 10+ doesn't honor <meta name=\"viewport\"> in\n// some cases. See https://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/.\n// Eventually @viewport will replace <meta name=\"viewport\">.\n//\n// However, `device-width` is broken on IE 10 on Windows (Phone) 8,\n// (see https://timkadlec.com/2013/01/windows-phone-8-and-device-width/ and https://github.com/twbs/bootstrap/issues/10497)\n// and the fix for that involves a snippet of JavaScript to sniff the user agent\n// and apply some conditional CSS.\n//\n// See https://getbootstrap.com/getting-started/#support-ie10-width for the relevant hack.\n//\n// Wrap `@viewport` with `@at-root` for when folks do a nested import (e.g.,\n// `.class-name { @import \"bootstrap\"; }`).\n@at-root {\n  @-ms-viewport { width: device-width; }\n}\n\n\n//\n// Reset HTML, body, and more\n//\n\nhtml {\n  // Sets a specific default `font-size` for user with `rem` type scales.\n  font-size: $font-size-root;\n  // As a side-effect of setting the @viewport above,\n  // IE11 & Edge make the scrollbar overlap the content and automatically hide itself when not in use.\n  // Unfortunately, the auto-showing of the scrollbar is sometimes too sensitive,\n  // thus making it hard to click on stuff near the right edge of the page.\n  // So we add this style to force IE11 & Edge to use a \"normal\", non-overlapping, non-auto-hiding scrollbar.\n  // See https://github.com/twbs/bootstrap/issues/18543\n  -ms-overflow-style: scrollbar;\n  // Changes the default tap highlight to be completely transparent in iOS.\n  -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n  // Make the `body` use the `font-size-root`\n  font-family: $font-family-base;\n  font-size: $font-size-base;\n  line-height: $line-height-base;\n  // Go easy on the eyes and use something other than `#000` for text\n  color: $body-color;\n  // By default, `<body>` has no `background-color` so we set one as a best practice.\n  background-color: $body-bg;\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n  outline: none !important;\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: .5rem;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted $abbr-border-color;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: $dt-font-weight;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0; // Undo browser default\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\n\n//\n// Links\n//\n\na {\n  color: $link-color;\n  text-decoration: $link-decoration;\n\n  @include hover-focus {\n    color: $link-hover-color;\n    text-decoration: $link-hover-decoration;\n  }\n\n  &:focus {\n    @include tab-focus();\n  }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n  color: inherit;\n  text-decoration: none;\n\n  @include hover-focus {\n    color: inherit;\n    text-decoration: none;\n  }\n\n  &:focus {\n    outline: none;\n  }\n}\n\n\n//\n// Code\n//\n\npre {\n  // Remove browser default top margin\n  margin-top: 0;\n  // Reset browser default of `1em` to use `rem`s\n  margin-bottom: 1rem;\n  // Normalize v4 removed this property, causing `<pre>` content to break out of wrapping code snippets\n  overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n  // Normalize adds `margin` to `figure`s as browsers apply it inconsistently.\n  // We reset that to create a better flow in-page.\n  margin: 0 0 1rem;\n}\n\n\n//\n// Images\n//\n\nimg {\n  // By default, `<img>`s are `inline-block`. This assumes that, and vertically\n  // centers them. This won't apply should you reset them to `block` level.\n  vertical-align: middle;\n  // Note: `<img>`s are deliberately not made responsive by default.\n  // For the rationale behind this, see the comments on the `.img-fluid` class.\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n\n// Avoid 300ms click delay on touch devices that support the `touch-action` CSS property.\n//\n// In particular, unlike most other browsers, IE11+Edge on Windows 10 on touch devices and IE Mobile 10-11\n// DON'T remove the click delay when `<meta name=\"viewport\" content=\"width=device-width\">` is present.\n// However, they DO support removing the click delay via `touch-action: manipulation`.\n// See:\n// * https://v4-alpha.getbootstrap.com/content/reboot/#click-delay-optimization-for-touch\n// * http://caniuse.com/#feat=css-touch-action\n// * https://patrickhlauke.github.io/touch/tests/results/#suppressing-300ms-delay\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput,\nlabel,\nselect,\nsummary,\ntextarea {\n  touch-action: manipulation;\n}\n\n\n//\n// Tables\n//\n\ntable {\n  // No longer part of Normalize since v4\n  border-collapse: collapse;\n  // Reset for nesting within parents with `background-color`.\n  background-color: $table-bg;\n}\n\ncaption {\n  padding-top: $table-cell-padding;\n  padding-bottom: $table-cell-padding;\n  color: $text-muted;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  // Centered by default, but left-align-ed to match the `td`s below.\n  text-align: left;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n  // Allow labels to use `margin` for spacing.\n  display: inline-block;\n  margin-bottom: .5rem;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\ntextarea {\n  // Normalize includes `font: inherit;`, so `font-family`. `font-size`, etc are\n  // properly inherited. However, `line-height` isn't inherited there.\n  line-height: inherit;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  // Apply a disabled cursor for radios and checkboxes.\n  //\n  // Note: Neither radios nor checkboxes can be readonly.\n  &:disabled {\n    cursor: $cursor-disabled;\n  }\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n  // bug where setting a custom line-height prevents text from being vertically\n  // centered within the input.\n  //\n  // Bug report: https://github.com/twbs/bootstrap/issues/11266\n  -webkit-appearance: listbox;\n}\n\ntextarea {\n  // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n  resize: vertical;\n}\n\nfieldset {\n  // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n  // Reset the default outline behavior of fieldsets so they don't affect page layout.\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  // Reset the entire legend element to match the `fieldset`\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n}\n\ninput[type=\"search\"] {\n  // This overrides the extra rounded corners on search inputs in iOS so that our\n  // `.form-control` class can properly style them. Note that this cannot simply\n  // be added to `.form-control` as it's not specific enough. For details, see\n  // https://github.com/twbs/bootstrap/issues/11586.\n  -webkit-appearance: none;\n}\n\n// todo: needed?\noutput {\n  display: inline-block;\n//  font-size: $font-size-base;\n//  line-height: $line-height;\n//  color: $input-color;\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n[hidden] {\n  display: none !important;\n}\n","//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  margin-bottom: $headings-margin-bottom;\n  font-family: $headings-font-family;\n  font-weight: $headings-font-weight;\n  line-height: $headings-line-height;\n  color: $headings-color;\n}\n\nh1, .h1 { font-size: $font-size-h1; }\nh2, .h2 { font-size: $font-size-h2; }\nh3, .h3 { font-size: $font-size-h3; }\nh4, .h4 { font-size: $font-size-h4; }\nh5, .h5 { font-size: $font-size-h5; }\nh6, .h6 { font-size: $font-size-h6; }\n\n.lead {\n  font-size: $lead-font-size;\n  font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n  font-size: $display1-size;\n  font-weight: $display1-weight;\n}\n.display-2 {\n  font-size: $display2-size;\n  font-weight: $display2-weight;\n}\n.display-3 {\n  font-size: $display3-size;\n  font-weight: $display3-weight;\n}\n.display-4 {\n  font-size: $display4-size;\n  font-weight: $display4-weight;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n  margin-top: $spacer-y;\n  margin-bottom: $spacer-y;\n  border: 0;\n  border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n  font-size: $small-font-size;\n  font-weight: normal;\n}\n\nmark,\n.mark {\n  padding: $mark-padding;\n  background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n  @include list-unstyled;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  @include list-unstyled;\n}\n.list-inline-item {\n  display: inline-block;\n\n  &:not(:last-child) {\n    margin-right: $list-inline-padding;\n  }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n  padding: ($spacer / 2) $spacer;\n  margin-bottom: $spacer;\n  font-size: $blockquote-font-size;\n  border-left: $blockquote-border-width solid $blockquote-border-color;\n}\n\n.blockquote-footer {\n  display: block;\n  font-size: 80%; // back to default font-size\n  color: $blockquote-small-color;\n\n  &::before {\n    content: \"\\2014 \\00A0\"; // em dash, nbsp\n  }\n}\n\n// Opposite alignment of blockquote\n.blockquote-reverse {\n  padding-right: $spacer;\n  padding-left: 0;\n  text-align: right;\n  border-right: $blockquote-border-width solid $blockquote-border-color;\n  border-left: 0;\n}\n\n.blockquote-reverse .blockquote-footer {\n  &::before {\n    content: \"\";\n  }\n  &::after {\n    content: \"\\00A0 \\2014\"; // nbsp, em dash\n  }\n}\n\n@if not $enable-flex {\n  // Clean up some horizontal `<dl>`s built with grids\n  // scss-lint:disable QualifyingElement\n  dl.row {\n    > dd + dt {\n      clear: left;\n    }\n  }\n  // scss-lint:enable QualifyingElement\n}\n","// scss-lint:disable QualifyingElement\n\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request:\n// http://www.phpied.com/delay-loading-your-print-css/\n// ==========================================================================\n\n@if $enable-print-styles {\n  @media print {\n    *,\n    *::before,\n    *::after,\n    *::first-letter,\n    p::first-line,\n    div::first-line,\n    blockquote::first-line,\n    li::first-line {\n      // Bootstrap specific; comment out `color` and `background`\n      //color: #000 !important; // Black prints faster:\n                                //   http://www.sanbeiji.com/archives/953\n      text-shadow: none !important;\n      //background: transparent !important;\n      box-shadow: none !important;\n    }\n\n    a,\n    a:visited {\n      text-decoration: underline;\n    }\n\n    // Bootstrap specific; comment the following selector out\n    //a[href]::after {\n    //  content: \" (\" attr(href) \")\";\n    //}\n\n    abbr[title]::after {\n      content: \" (\" attr(title) \")\";\n    }\n\n    // Bootstrap specific; comment the following selector out\n    //\n    // Don't show links that are fragment identifiers,\n    // or use the `javascript:` pseudo protocol\n    //\n\n    //a[href^=\"#\"]::after,\n    //a[href^=\"javascript:\"]::after {\n    // content: \"\";\n    //}\n\n    pre {\n      white-space: pre-wrap !important;\n    }\n    pre,\n    blockquote {\n      border: $border-width solid #999;   // Bootstrap custom code; using `$border-width` instead of 1px\n      page-break-inside: avoid;\n    }\n\n    //\n    // Printing Tables:\n    // http://css-discuss.incutio.com/wiki/Printing_Tables\n    //\n\n    thead {\n      display: table-header-group;\n    }\n\n    tr,\n    img {\n      page-break-inside: avoid;\n    }\n\n    p,\n    h2,\n    h3 {\n      orphans: 3;\n      widows: 3;\n    }\n\n    h2,\n    h3 {\n      page-break-after: avoid;\n    }\n\n    // Bootstrap specific changes start\n\n    // Bootstrap components\n    .navbar {\n      display: none;\n    }\n    .btn,\n    .dropup > .btn {\n      > .caret {\n        border-top-color: #000 !important;\n      }\n    }\n    .tag {\n      border: $border-width solid #000;\n    }\n\n    .table {\n      border-collapse: collapse !important;\n\n      td,\n      th {\n        background-color: #fff !important;\n      }\n    }\n    .table-bordered {\n      th,\n      td {\n        border: 1px solid #ddd !important;\n      }\n    }\n\n    // Bootstrap specific changes end\n  }\n}\n","@mixin hover {\n  // TODO: re-enable along with mq4-hover-shim\n//  @if $enable-hover-media-query {\n//    // See Media Queries Level 4: https://drafts.csswg.org/mediaqueries/#hover\n//    // Currently shimmed by https://github.com/twbs/mq4-hover-shim\n//    @media (hover: hover) {\n//      &:hover { @content }\n//    }\n//  }\n//  @else {\n    &:hover { @content }\n//  }\n}\n\n@mixin hover-focus {\n  @if $enable-hover-media-query {\n    &:focus { @content }\n    @include hover { @content }\n  }\n  @else {\n    &:focus,\n    &:hover {\n      @content\n    }\n  }\n}\n\n@mixin plain-hover-focus {\n  @if $enable-hover-media-query {\n    &,\n    &:focus {\n      @content\n    }\n    @include hover { @content }\n  }\n  @else {\n    &,\n    &:focus,\n    &:hover {\n      @content\n    }\n  }\n}\n\n@mixin hover-focus-active {\n  @if $enable-hover-media-query {\n    &:focus,\n    &:active {\n      @content\n    }\n    @include hover { @content }\n  }\n  @else {\n    &:focus,\n    &:active,\n    &:hover {\n      @content\n    }\n  }\n}\n","// WebKit-style focus\n\n@mixin tab-focus() {\n  // WebKit-specific. Other browsers will keep their default outline style.\n  // (Initially tried to also force default via `outline: initial`,\n  // but that seems to erroneously remove the outline in Firefox altogether.)\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n  @include img-fluid;\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n  padding: $thumbnail-padding;\n  background-color: $thumbnail-bg;\n  border: $thumbnail-border-width solid $thumbnail-border-color;\n  @include border-radius($thumbnail-border-radius);\n  transition: all .2s ease-in-out;\n  @include box-shadow($thumbnail-box-shadow);\n\n  // Keep them at most 100% wide\n  @include img-fluid;\n}\n\n//\n// Figures\n//\n\n.figure {\n  // Ensures the caption's text aligns with the image.\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: ($spacer-y / 2);\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: $figure-caption-font-size;\n  color: $gray-light;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n  // Part 1: Set a maximum relative to the parent\n  max-width: 100%;\n  // Part 2: Override the height to auto, otherwise images will be stretched\n  // when setting a width and height attribute on the img element.\n  height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n  background-image: url($file-1x);\n\n  // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n  // but doesn't convert dppx=>dpi.\n  // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n  // Compatibility info: http://caniuse.com/#feat=css-media-resolution\n  @media\n  only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n  only screen and (min-resolution: 2dppx) { // Standardized\n    background-image: url($file-2x);\n    background-size: $width-1x $height-1x;\n  }\n}\n","// Single side border-radius\n\n@mixin border-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-radius: $radius;\n  }\n}\n\n@mixin border-top-radius($radius) {\n  @if $enable-rounded {\n    border-top-right-radius: $radius;\n    border-top-left-radius: $radius;\n  }\n}\n\n@mixin border-right-radius($radius) {\n  @if $enable-rounded {\n    border-bottom-right-radius: $radius;\n    border-top-right-radius: $radius;\n  }\n}\n\n@mixin border-bottom-radius($radius) {\n  @if $enable-rounded {\n    border-bottom-right-radius: $radius;\n    border-bottom-left-radius: $radius;\n  }\n}\n\n@mixin border-left-radius($radius) {\n  @if $enable-rounded {\n    border-bottom-left-radius: $radius;\n    border-top-left-radius: $radius;\n  }\n}\n","// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: $font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: $code-padding-y $code-padding-x;\n  font-size: $code-font-size;\n  color: $code-color;\n  background-color: $code-bg;\n  @include border-radius($border-radius);\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: $code-padding-y $code-padding-x;\n  font-size: $code-font-size;\n  color: $kbd-color;\n  background-color: $kbd-bg;\n  @include border-radius($border-radius-sm);\n  @include box-shadow($kbd-box-shadow);\n\n  kbd {\n    padding: 0;\n    font-size: 100%;\n    font-weight: $nested-kbd-font-weight;\n    @include box-shadow(none);\n  }\n}\n\n// Blocks of code\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  font-size: $code-font-size;\n  color: $pre-color;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: $pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n  .container {\n    @include make-container();\n    @include make-container-max-widths();\n  }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n@if $enable-grid-classes {\n  .container-fluid {\n    @include make-container();\n  }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n  .row {\n    @include make-row();\n  }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n  @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width-base) {\n  margin-left: auto;\n  margin-right: auto;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n  @if not $enable-flex {\n    @include clearfix();\n  }\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n  @each $breakpoint, $container-max-width in $max-widths {\n    @include media-breakpoint-up($breakpoint, $breakpoints) {\n      width: $container-max-width;\n      max-width: 100%;\n    }\n  }\n}\n\n@mixin make-gutters($gutters: $grid-gutter-widths) {\n  @each $breakpoint in map-keys($gutters) {\n    @include media-breakpoint-up($breakpoint) {\n      $gutter: map-get($gutters, $breakpoint);\n      padding-right: ($gutter / 2);\n      padding-left:  ($gutter / 2);\n    }\n  }\n}\n\n@mixin make-row($gutters: $grid-gutter-widths) {\n  @if $enable-flex {\n    display: flex;\n    flex-wrap: wrap;\n  } @else {\n    @include clearfix();\n  }\n\n  @each $breakpoint in map-keys($gutters) {\n    @include media-breakpoint-up($breakpoint) {\n      $gutter: map-get($gutters, $breakpoint);\n      margin-right: ($gutter / -2);\n      margin-left:  ($gutter / -2);\n    }\n  }\n}\n\n@mixin make-col-ready($gutters: $grid-gutter-widths) {\n  position: relative;\n  min-height: 1px; // Prevent collapsing\n\n  // Prevent columns from becoming too narrow when at smaller grid tiers by\n  // always setting `width: 100%;`. This works because we use `flex` values\n  // later on to override this initial width.\n  @if $enable-flex {\n    width: 100%;\n  }\n\n  @each $breakpoint in map-keys($gutters) {\n    @include media-breakpoint-up($breakpoint) {\n      $gutter: map-get($gutters, $breakpoint);\n      padding-right: ($gutter / 2);\n      padding-left:  ($gutter / 2);\n    }\n  }\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n  @if $enable-flex {\n    flex: 0 0 percentage($size / $columns);\n    // Add a `max-width` to ensure content within each column does not blow out\n    // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n    // do not appear to require this.\n    max-width: percentage($size / $columns);\n  } @else {\n    float: left;\n    width: percentage($size / $columns);\n  }\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n  margin-left: percentage($size / $columns);\n}\n\n@mixin make-col-push($size, $columns: $grid-columns) {\n  left: if($size > 0, percentage($size / $columns), auto);\n}\n\n@mixin make-col-pull($size, $columns: $grid-columns) {\n  right: if($size > 0, percentage($size / $columns), auto);\n}\n\n@mixin make-col-modifier($type, $size, $columns) {\n  // Work around the lack of dynamic mixin @include support (https://github.com/sass/sass/issues/626)\n  @if $type == push {\n    @include make-col-push($size, $columns);\n  } @else if $type == pull {\n    @include make-col-pull($size, $columns);\n  } @else if $type == offset {\n    @include make-col-offset($size, $columns);\n  }\n}\n","@mixin clearfix() {\n  &::after {\n    content: \"\";\n    display: table;\n    clear: both;\n  }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n//    (xs: 0, sm: 544px, md: 768px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n//    >> breakpoint-next(sm)\n//    md\n//    >> breakpoint-next(sm, (xs: 0, sm: 544px, md: 768px))\n//    md\n//    >> breakpoint-next(sm, $breakpoint-names: (xs sm md))\n//    md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n  $n: index($breakpoint-names, $name);\n  @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n//    >> breakpoint-min(sm, (xs: 0, sm: 544px, md: 768px))\n//    544px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n  $min: map-get($breakpoints, $name);\n  @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.1.\n//\n//    >> breakpoint-max(sm, (xs: 0, sm: 544px, md: 768px))\n//    767px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n  $next: breakpoint-next($name, $breakpoints);\n  @return if($next, breakpoint-min($next, $breakpoints) - 1px, null);\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n  $min: breakpoint-min($name, $breakpoints);\n  @if $min {\n    @media (min-width: $min) {\n      @content;\n    }\n  } @else {\n    @content;\n  }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n  $max: breakpoint-max($name, $breakpoints);\n  @if $max {\n    @media (max-width: $max) {\n      @content;\n    }\n  } @else {\n    @content;\n  }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n  @include media-breakpoint-up($name, $breakpoints) {\n    @include media-breakpoint-down($name, $breakpoints) {\n      @content;\n    }\n  }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n  @include media-breakpoint-up($lower, $breakpoints) {\n    @include media-breakpoint-down($upper, $breakpoints) {\n      @content;\n    }\n  }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutters: $grid-gutter-widths, $breakpoints: $grid-breakpoints) {\n  // Common properties for all breakpoints\n  %grid-column {\n    position: relative;\n    // Prevent columns from collapsing when empty\n    min-height: 1px;\n\n    @if $enable-flex {\n      width: 100%;\n    }\n\n    @include make-gutters($gutters);\n  }\n\n  $breakpoint-counter: 0;\n  @each $breakpoint in map-keys($breakpoints) {\n    $breakpoint-counter: ($breakpoint-counter + 1);\n\n    // Allow columns to stretch full width below their breakpoints\n    .col-#{$breakpoint} {\n      @extend %grid-column;\n    }\n\n    @for $i from 1 through $columns {\n      .col-#{$breakpoint}-#{$i} {\n        @extend %grid-column;\n      }\n    }\n\n    @include media-breakpoint-up($breakpoint, $breakpoints) {\n      // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n      @if $enable-flex {\n        .col-#{$breakpoint} {\n          flex-basis: 0;\n          flex-grow: 1;\n          max-width: 100%;\n        }\n      }\n\n      @for $i from 1 through $columns {\n        .col-#{$breakpoint}-#{$i} {\n          @include make-col($i, $columns);\n        }\n      }\n\n      @each $modifier in (pull, push) {\n        @for $i from 0 through $columns {\n          .#{$modifier}-#{$breakpoint}-#{$i} {\n            @include make-col-modifier($modifier, $i, $columns)\n          }\n        }\n      }\n\n      // `$columns - 1` because offsetting by the width of an entire row isn't possible\n      @for $i from 0 through ($columns - 1) {\n        @if $breakpoint-counter != 1 or $i != 0 { // Avoid emitting useless .offset-xs-0\n          .offset-#{$breakpoint}-#{$i} {\n            @include make-col-modifier(offset, $i, $columns)\n          }\n        }\n      }\n    }\n  }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: $spacer;\n\n  th,\n  td {\n    padding: $table-cell-padding;\n    vertical-align: top;\n    border-top: $table-border-width solid $table-border-color;\n  }\n\n  thead th {\n    vertical-align: bottom;\n    border-bottom: (2 * $table-border-width) solid $table-border-color;\n  }\n\n  tbody + tbody {\n    border-top: (2 * $table-border-width) solid $table-border-color;\n  }\n\n  .table {\n    background-color: $body-bg;\n  }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n  th,\n  td {\n    padding: $table-sm-cell-padding;\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: $table-border-width solid $table-border-color;\n\n  th,\n  td {\n    border: $table-border-width solid $table-border-color;\n  }\n\n  thead {\n    th,\n    td {\n      border-bottom-width: (2 * $table-border-width);\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  tbody tr:nth-of-type(odd) {\n    background-color: $table-bg-accent;\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  tbody tr {\n    @include hover {\n      background-color: $table-bg-hover;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n@include table-row-variant(active, $table-bg-active);\n@include table-row-variant(success, $state-success-bg);\n@include table-row-variant(info, $state-info-bg);\n@include table-row-variant(warning, $state-warning-bg);\n@include table-row-variant(danger, $state-danger-bg);\n\n\n// Inverse styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n.thead-inverse {\n  th {\n    color: #fff;\n    background-color: $gray-dark;\n  }\n}\n\n.thead-default {\n  th {\n    color: $gray;\n    background-color: $gray-lighter;\n  }\n}\n\n.table-inverse {\n  color: $gray-lighter;\n  background-color: $gray-dark;\n\n  th,\n  td,\n  thead th {\n    border-color: $gray;\n  }\n\n  &.table-bordered {\n    border: 0;\n  }\n}\n\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n  display: block;\n  width: 100%;\n  min-height: 0%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n  overflow-x: auto;\n\n  // TODO: find out if we need this still.\n  //\n  // border: $table-border-width solid $table-border-color;\n  // -ms-overflow-style: -ms-autohiding-scrollbar; // See https://github.com/twbs/bootstrap/pull/10057\n}\n\n\n.table-reflow {\n  thead {\n    float: left;\n  }\n\n  tbody {\n    display: block;\n    white-space: nowrap;\n  }\n\n  th,\n  td {\n    border-top: $table-border-width solid $table-border-color;\n    border-left: $table-border-width solid $table-border-color;\n\n    &:last-child {\n      border-right: $table-border-width solid $table-border-color;\n    }\n  }\n\n  thead,\n  tbody,\n  tfoot {\n    &:last-child {\n      tr:last-child th,\n      tr:last-child td {\n        border-bottom: $table-border-width solid $table-border-color;\n      }\n    }\n  }\n\n  tr {\n    float: left;\n\n    th,\n    td {\n      display: block !important;\n      border: $table-border-width solid $table-border-color;\n    }\n  }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table-#{$state} {\n    &,\n    > th,\n    > td {\n      background-color: $background;\n    }\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover {\n    $hover-background: darken($background, 5%);\n\n    .table-#{$state} {\n      @include hover {\n        background-color: $hover-background;\n\n        > td,\n        > th {\n          background-color: $hover-background;\n        }\n      }\n    }\n  }\n}\n","// scss-lint:disable QualifyingElement\n\n//\n// Textual form controls\n//\n\n.form-control {\n  display: block;\n  width: 100%;\n  // // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  // height: $input-height;\n  padding: $input-padding-y $input-padding-x;\n  font-size: $font-size-base;\n  line-height: $input-line-height;\n  color: $input-color;\n  background-color: $input-bg;\n  // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214.\n  background-image: none;\n  background-clip: padding-box;\n  border: $input-btn-border-width solid $input-border-color;\n\n  // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n  @if $enable-rounded {\n    // Manually use the if/else instead of the mixin to account for iOS override\n    border-radius: $input-border-radius;\n  } @else {\n    // Otherwise undo the iOS default\n    border-radius: 0;\n  }\n\n  @include box-shadow($input-box-shadow);\n  @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s);\n\n  // Unstyle the caret on `<select>`s in IE10+.\n  &::-ms-expand {\n    background-color: transparent;\n    border: 0;\n  }\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  @include form-control-focus();\n\n  // Placeholder\n  &::placeholder {\n    color: $input-color-placeholder;\n    // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n    opacity: 1;\n  }\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &:disabled,\n  &[readonly] {\n    background-color: $input-bg-disabled;\n    // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n    opacity: 1;\n  }\n\n  &:disabled {\n    cursor: $cursor-disabled;\n  }\n}\n\nselect.form-control {\n  &:not([size]):not([multiple]) {\n    $select-border-width: ($border-width * 2);\n    height: calc(#{$input-height} - #{$select-border-width});\n  }\n\n  &:focus::-ms-value {\n    // Suppress the nested default white text on blue background highlight given to\n    // the selected option text when the (still closed) <select> receives focus\n    // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n    // match the appearance of the native widget.\n    // See https://github.com/twbs/bootstrap/issues/19398.\n    color: $input-color;\n    background-color: $input-bg;\n  }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n  display: block;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label text to\n// align with the form controls.\n.col-form-label {\n  padding-top: $input-padding-y;\n  padding-bottom: $input-padding-y;\n  margin-bottom: 0; // Override the `<label>` default\n}\n\n.col-form-label-lg {\n  padding-top: $input-padding-y-lg;\n  padding-bottom: $input-padding-y-lg;\n  font-size: $font-size-lg;\n}\n\n.col-form-label-sm {\n  padding-top: $input-padding-y-sm;\n  padding-bottom: $input-padding-y-sm;\n  font-size: $font-size-sm;\n}\n\n\n//\n// Legends\n//\n\n// For use with horizontal and inline forms, when you need the legend text to\n// be the same size as regular labels, and to align with the form controls.\n.col-form-legend {\n  padding-top: $input-padding-y;\n  padding-bottom: $input-padding-y;\n  margin-bottom: 0;\n  font-size: $font-size-base;\n}\n\n\n// Static form control text\n//\n// Apply class to an element to make any string of text align with labels in a\n// horizontal form layout.\n\n.form-control-static {\n  padding-top: $input-padding-y;\n  padding-bottom: $input-padding-y;\n  line-height: $input-line-height;\n  border: solid transparent;\n  border-width: 1px 0;\n\n  &.form-control-sm,\n  &.form-control-lg {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// The `.form-group-* form-control` variations are sadly duplicated to avoid the\n// issue documented in https://github.com/twbs/bootstrap/issues/15074.\n\n.form-control-sm {\n  padding: $input-padding-y-sm $input-padding-x-sm;\n  font-size: $font-size-sm;\n  @include border-radius($input-border-radius-sm);\n}\n\nselect.form-control-sm {\n  &:not([size]):not([multiple]) {\n    height: $input-height-sm;\n  }\n}\n\n.form-control-lg {\n  padding: $input-padding-y-lg $input-padding-x-lg;\n  font-size: $font-size-lg;\n  @include border-radius($input-border-radius-lg);\n}\n\nselect.form-control-lg {\n  &:not([size]):not([multiple]) {\n    height: $input-height-lg;\n  }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: $form-group-margin-bottom;\n}\n\n.form-text {\n  display: block;\n  margin-top: ($spacer * .25);\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.form-check {\n  position: relative;\n  display: block;\n  margin-bottom: ($spacer * .75);\n\n  // Move up sibling radios or checkboxes for tighter spacing\n  + .form-check {\n    margin-top: -.25rem;\n  }\n\n  &.disabled {\n    .form-check-label {\n      color: $text-muted;\n      cursor: $cursor-disabled;\n    }\n  }\n}\n\n.form-check-label {\n  padding-left: 1.25rem;\n  margin-bottom: 0; // Override default `<label>` bottom margin\n  cursor: pointer;\n}\n\n.form-check-input {\n  position: absolute;\n  margin-top: .25rem;\n  margin-left: -1.25rem;\n\n  &:only-child {\n    position: static;\n  }\n}\n\n// Radios and checkboxes on same line\n.form-check-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 1.25rem;\n  margin-bottom: 0; // Override default `<label>` bottom margin\n  vertical-align: middle;\n  cursor: pointer;\n\n  + .form-check-inline {\n    margin-left: .75rem;\n  }\n\n  &.disabled {\n    color: $text-muted;\n    cursor: $cursor-disabled;\n  }\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.form-control-feedback {\n  margin-top: ($spacer * .25);\n}\n\n.form-control-success,\n.form-control-warning,\n.form-control-danger {\n  padding-right: ($input-padding-x * 3);\n  background-repeat: no-repeat;\n  background-position: center right ($input-height / 4);\n  background-size: ($input-height / 2) ($input-height / 2);\n}\n\n// Form validation states\n.has-success {\n  @include form-control-validation($brand-success);\n\n  .form-control-success {\n    background-image: $form-icon-success;\n  }\n}\n\n.has-warning {\n  @include form-control-validation($brand-warning);\n\n  .form-control-warning {\n    background-image: $form-icon-warning;\n  }\n}\n\n.has-danger {\n  @include form-control-validation($brand-danger);\n\n  .form-control-danger {\n    background-image: $form-icon-danger;\n  }\n}\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n\n.form-inline {\n\n  // Kick in the inline\n  @include media-breakpoint-up(sm) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n\n    // Make static controls behave like regular ones\n    .form-control-static {\n      display: inline-block;\n    }\n\n    .input-group {\n      display: inline-table;\n      width: auto;\n      vertical-align: middle;\n\n      .input-group-addon,\n      .input-group-btn,\n      .form-control {\n        width: auto;\n      }\n    }\n\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .form-control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match.\n    .form-check {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n    .form-check-label {\n      padding-left: 0;\n    }\n    .form-check-input {\n      position: relative;\n      margin-left: 0;\n    }\n\n    // Re-override the feedback icon.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n","// Form validation states\n//\n// Used in _forms.scss to generate the form validation CSS for warnings, errors,\n// and successes.\n\n@mixin form-control-validation($color) {\n  // Color the label and help text\n  .form-control-feedback,\n  .form-control-label,\n  .form-check-label,\n  .form-check-inline,\n  .custom-control {\n    color: $color;\n  }\n\n  // Set the border and box shadow on specific inputs to match\n  .form-control {\n    border-color: $color;\n\n    @if $enable-rounded {\n      &:focus {\n        box-shadow: $input-box-shadow, 0 0 6px lighten($color, 20%);\n      }\n    }\n  }\n\n  // Set validation states also for addons\n  .input-group-addon {\n    color: $color;\n    border-color: $color;\n    background-color: lighten($color, 40%);\n  }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n@mixin form-control-focus() {\n  &:focus {\n    color: $input-color-focus;\n    background-color: $input-bg-focus;\n    border-color: $input-border-focus;\n    outline: none;\n    @include box-shadow($input-box-shadow-focus);\n  }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n\n@mixin input-size($parent, $input-height, $padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n  #{$parent} {\n    height: $input-height;\n    padding: $padding-y $padding-x;\n    font-size: $font-size;\n    line-height: $line-height;\n    @include border-radius($border-radius);\n  }\n\n  select#{$parent} {\n    height: $input-height;\n    line-height: $input-height;\n  }\n\n  textarea#{$parent},\n  select[multiple]#{$parent} {\n    height: auto;\n  }\n}\n","// scss-lint:disable QualifyingElement\n\n//\n// Base styles\n//\n\n.btn {\n  display: inline-block;\n  font-weight: $btn-font-weight;\n  line-height: $btn-line-height;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  cursor: pointer;\n  user-select: none;\n  border: $input-btn-border-width solid transparent;\n  @include button-size($btn-padding-y, $btn-padding-x, $font-size-base, $btn-border-radius);\n  @include transition(all .2s ease-in-out);\n\n  &,\n  &:active,\n  &.active {\n    &:focus,\n    &.focus {\n      @include tab-focus();\n    }\n  }\n\n  @include hover-focus {\n    text-decoration: none;\n  }\n  &.focus {\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    background-image: none;\n    outline: 0;\n    @include box-shadow($btn-active-box-shadow);\n  }\n\n  &.disabled,\n  &:disabled {\n    cursor: $cursor-disabled;\n    opacity: .65;\n    @include box-shadow(none);\n  }\n}\n\n// Future-proof disabling of clicks on `<a>` elements\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n\n\n//\n// Alternate buttons\n//\n\n.btn-primary {\n  @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);\n}\n.btn-secondary {\n  @include button-variant($btn-secondary-color, $btn-secondary-bg, $btn-secondary-border);\n}\n.btn-info {\n  @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border);\n}\n.btn-success {\n  @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);\n}\n.btn-warning {\n  @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border);\n}\n.btn-danger {\n  @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);\n}\n\n// Remove all backgrounds\n.btn-outline-primary {\n  @include button-outline-variant($btn-primary-bg);\n}\n.btn-outline-secondary {\n  @include button-outline-variant($btn-secondary-border);\n}\n.btn-outline-info {\n  @include button-outline-variant($btn-info-bg);\n}\n.btn-outline-success {\n  @include button-outline-variant($btn-success-bg);\n}\n.btn-outline-warning {\n  @include button-outline-variant($btn-warning-bg);\n}\n.btn-outline-danger {\n  @include button-outline-variant($btn-danger-bg);\n}\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n  font-weight: normal;\n  color: $link-color;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &.active,\n  &:disabled {\n    background-color: transparent;\n    @include box-shadow(none);\n  }\n  &,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  @include hover {\n    border-color: transparent;\n  }\n  @include hover-focus {\n    color: $link-hover-color;\n    text-decoration: $link-hover-decoration;\n    background-color: transparent;\n  }\n  &:disabled {\n    @include hover-focus {\n      color: $btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $font-size-lg, $btn-border-radius-lg);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $font-size-sm, $btn-border-radius-sm);\n}\n\n\n//\n// Block button\n//\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: $btn-block-spacing-y;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-variant($color, $background, $border) {\n  $active-background: darken($background, 10%);\n  $active-border: darken($border, 12%);\n\n  color: $color;\n  background-color: $background;\n  border-color: $border;\n  @include box-shadow($btn-box-shadow);\n\n  @include hover {\n    color: $color;\n    background-color: $active-background;\n        border-color: $active-border;\n  }\n\n  &:focus,\n  &.focus {\n    color: $color;\n    background-color: $active-background;\n        border-color: $active-border;\n  }\n\n  &:active,\n  &.active,\n  .open > &.dropdown-toggle {\n    color: $color;\n    background-color: $active-background;\n        border-color: $active-border;\n    // Remove the gradient for the pressed/active state\n    background-image: none;\n    @include box-shadow($btn-active-box-shadow);\n\n    &:hover,\n    &:focus,\n    &.focus {\n      color: $color;\n      background-color: darken($background, 17%);\n          border-color: darken($border, 25%);\n    }\n  }\n\n  &.disabled,\n  &:disabled {\n    &:focus,\n    &.focus {\n      background-color: $background;\n          border-color: $border;\n    }\n    @include hover {\n      background-color: $background;\n          border-color: $border;\n    }\n  }\n}\n\n@mixin button-outline-variant($color) {\n  color: $color;\n  background-image: none;\n  background-color: transparent;\n  border-color: $color;\n\n  @include hover {\n    color: #fff;\n    background-color: $color;\n        border-color: $color;\n  }\n\n  &:focus,\n  &.focus {\n    color: #fff;\n    background-color: $color;\n        border-color: $color;\n  }\n\n  &:active,\n  &.active,\n  .open > &.dropdown-toggle {\n    color: #fff;\n    background-color: $color;\n        border-color: $color;\n\n    &:hover,\n    &:focus,\n    &.focus {\n      color: #fff;\n      background-color: darken($color, 17%);\n          border-color: darken($color, 25%);\n    }\n  }\n\n  &.disabled,\n  &:disabled {\n    &:focus,\n    &.focus {\n      border-color: lighten($color, 20%);\n    }\n    @include hover {\n      border-color: lighten($color, 20%);\n    }\n  }\n}\n\n// Button sizes\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n  padding: $padding-y $padding-x;\n  font-size: $font-size;\n  @include border-radius($border-radius);\n}\n",".fade {\n  opacity: 0;\n  transition: opacity .15s linear;\n\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n  &.in {\n    display: block;\n  }\n}\n\ntr {\n  &.collapse.in {\n    display: table-row;\n  }\n}\n\ntbody {\n  &.collapse.in {\n    display: table-row-group;\n  }\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  transition-timing-function: ease;\n  transition-duration: .35s;\n  transition-property: height;\n}\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropdown {\n  position: relative;\n}\n\n.dropdown-toggle {\n  // Generate the caret automatically\n  &::after {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: $caret-width;\n    vertical-align: middle;\n    content: \"\";\n    border-top: $caret-width solid;\n    border-right: $caret-width solid transparent;\n    border-left: $caret-width solid transparent;\n  }\n\n  // Prevent the focus on the dropdown toggle when closing dropdowns\n  &:focus {\n    outline: 0;\n  }\n}\n\n.dropup {\n  .dropdown-toggle {\n    &::after {\n      border-top: 0;\n      border-bottom: $caret-width solid;\n    }\n  }\n}\n\n// The dropdown menu\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: $zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: $dropdown-min-width;\n  padding: $dropdown-padding-y 0;\n  margin: $dropdown-margin-top 0 0; // override default ul\n  font-size: $font-size-base;\n  color: $body-color;\n  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n  list-style: none;\n  background-color: $dropdown-bg;\n  background-clip: padding-box;\n  border: $dropdown-border-width solid $dropdown-border-color;\n  @include border-radius($border-radius);\n  @include box-shadow($dropdown-box-shadow);\n}\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n  @include nav-divider($dropdown-divider-bg);\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n  display: block;\n  width: 100%; // For `<button>`s\n  padding: 3px $dropdown-item-padding-x;\n  clear: both;\n  font-weight: normal;\n  color: $dropdown-link-color;\n  text-align: inherit; // For `<button>`s\n  white-space: nowrap; // prevent links from randomly breaking onto new lines\n  background: none; // For `<button>`s\n  border: 0; // For `<button>`s\n\n  @include hover-focus {\n    color: $dropdown-link-hover-color;\n    text-decoration: none;\n    background-color: $dropdown-link-hover-bg;\n  }\n\n  // Active state\n  &.active {\n    @include plain-hover-focus {\n      color: $dropdown-link-active-color;\n      text-decoration: none;\n      background-color: $dropdown-link-active-bg;\n      outline: 0;\n    }\n  }\n\n  // Disabled state\n  //\n  // Gray out text and ensure the hover/focus state remains gray\n  &.disabled {\n    @include plain-hover-focus {\n      color: $dropdown-link-disabled-color;\n    }\n\n    // Nuke hover/focus effects\n    @include hover-focus {\n      text-decoration: none;\n      cursor: $cursor-disabled;\n      background-color: transparent;\n      background-image: none; // Remove CSS gradient\n      @include reset-filter();\n    }\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  right: 0;\n  left: auto; // Reset the default from `.dropdown-menu`\n}\n\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: $dropdown-padding-y $dropdown-item-padding-x;\n  margin-bottom: 0; // for use with heading elements\n  font-size: $font-size-sm;\n  color: $dropdown-header-color;\n  white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: $zindex-dropdown-backdrop;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    content: \"\";\n    border-top: 0;\n    border-bottom: $caret-width solid;\n  }\n\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: $dropdown-margin-top;\n  }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n@mixin nav-divider($color: #e5e5e5) {\n  height: 1px;\n  margin: ($spacer-y / 2) 0;\n  overflow: hidden;\n  background-color: $color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9.\n\n@mixin reset-filter() {\n  filter: \"progid:DXImageTransform.Microsoft.gradient(enabled = false)\";\n}\n","// scss-lint:disable QualifyingElement\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n\n  > .btn {\n    position: relative;\n    float: left;\n    margin-bottom: 0;\n\n    // Bring the \"active\" button to the front\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    @include hover {\n      z-index: 2;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -$input-btn-border-width;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -$btn-toolbar-margin; // Offset the first child's margin\n  @include clearfix();\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: $btn-toolbar-margin;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n\n  &:not(:last-child):not(.dropdown-toggle) {\n    @include border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  @include border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    @include border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  @include border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.btn + .dropdown-toggle-split {\n  padding-right: $btn-padding-x * .75;\n  padding-left: $btn-padding-x * .75;\n\n  &::after {\n    margin-left: 0;\n  }\n}\n\n.btn-sm + .dropdown-toggle-split {\n  padding-right: $btn-padding-x-sm * .75;\n  padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n  padding-right: $btn-padding-x-lg * .75;\n  padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  @include box-shadow($btn-active-box-shadow);\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    @include box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: $caret-width-lg $caret-width-lg 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 $caret-width-lg $caret-width-lg;\n}\n\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    @include clearfix();\n\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -$input-btn-border-width;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    @include border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    @include border-top-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    @include border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  @include border-top-radius(0);\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n  > .btn,\n  > .btn-group > .btn {\n    input[type=\"radio\"],\n    input[type=\"checkbox\"] {\n      position: absolute;\n      clip: rect(0,0,0,0);\n      pointer-events: none;\n    }\n  }\n}\n","//\n// Base styles\n//\n\n.input-group {\n  position: relative;\n  width: 100%;\n\n  @if $enable-flex {\n    display: flex;\n  } @else {\n    display: table;\n    // Prevent input groups from inheriting border styles from table cells when\n    // placed within a table.\n    border-collapse: separate;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n    // Bring the \"active\" form control to the front\n    @include hover-focus-active {\n      z-index: 3;\n    }\n    @if $enable-flex {\n      flex: 1;\n    } @else {\n      // IE9 fubars the placeholder attribute in text inputs and the arrows on\n      // select elements in input groups. To fix it, we float the input. Details:\n      // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n      float: left;\n      width: 100%;\n    }\n    margin-bottom: 0;\n  }\n}\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  @if not $enable-flex {\n    display: table-cell;\n  }\n\n  &:not(:first-child):not(:last-child) {\n    @include border-radius(0);\n  }\n}\n\n.input-group-addon,\n.input-group-btn {\n  @if not $enable-flex {\n    width: 1%;\n  }\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  @extend .form-control-lg;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  @extend .form-control-sm;\n}\n\n\n//\n// Text input groups\n//\n\n.input-group-addon {\n  padding: $input-padding-y $input-padding-x;\n  margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom\n  font-size: $font-size-base;\n  font-weight: normal;\n  line-height: $input-line-height;\n  color: $input-color;\n  text-align: center;\n  background-color: $input-group-addon-bg;\n  border: $input-btn-border-width solid $input-group-addon-border-color;\n  @include border-radius($input-border-radius);\n\n  // Sizing\n  &.form-control-sm {\n    padding: $input-padding-y-sm $input-padding-x-sm;\n    font-size: $font-size-sm;\n    @include border-radius($input-border-radius-sm);\n  }\n  &.form-control-lg {\n    padding: $input-padding-y-lg $input-padding-x-lg;\n    font-size: $font-size-lg;\n    @include border-radius($input-border-radius-lg);\n  }\n\n  // scss-lint:disable QualifyingElement\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n  // scss-lint:enable QualifyingElement\n}\n\n\n//\n// Reset rounded corners\n//\n\n.input-group .form-control:not(:last-child),\n.input-group-addon:not(:last-child),\n.input-group-btn:not(:last-child) > .btn,\n.input-group-btn:not(:last-child) > .btn-group > .btn,\n.input-group-btn:not(:last-child) > .dropdown-toggle,\n.input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn {\n  @include border-right-radius(0);\n}\n.input-group-addon:not(:last-child) {\n  border-right: 0;\n}\n.input-group .form-control:not(:first-child),\n.input-group-addon:not(:first-child),\n.input-group-btn:not(:first-child) > .btn,\n.input-group-btn:not(:first-child) > .btn-group > .btn,\n.input-group-btn:not(:first-child) > .dropdown-toggle,\n.input-group-btn:not(:last-child) > .btn:not(:first-child),\n.input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn {\n  @include border-left-radius(0);\n}\n.form-control + .input-group-addon:not(:first-child) {\n  border-left: 0;\n}\n\n//\n// Button input groups\n//\n\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: (-$input-btn-border-width);\n    }\n    // Bring the \"active\" button to the front\n    @include hover-focus-active {\n      z-index: 3;\n    }\n  }\n\n  // Negative margin to only have a single, shared border between the two\n  &:not(:last-child) {\n    > .btn,\n    > .btn-group {\n      margin-right: (-$input-btn-border-width);\n    }\n  }\n  &:not(:first-child) {\n    > .btn,\n    > .btn-group {\n      z-index: 2;\n      margin-left: (-$input-btn-border-width);\n      // Because specificity\n      @include hover-focus-active {\n        z-index: 3;\n      }\n    }\n  }\n}\n","// scss-lint:disable PropertyCount\n\n// Embedded icons from Open Iconic.\n// Released under MIT and copyright 2014 Waybury.\n// https://useiconic.com/open\n\n\n// Checkboxes and radios\n//\n// Base class takes care of all the key behavioral aspects.\n\n.custom-control {\n  position: relative;\n  display: inline-block;\n  padding-left: $custom-control-gutter;\n  cursor: pointer;\n\n  + .custom-control {\n    margin-left: $custom-control-spacer-x;\n  }\n}\n\n.custom-control-input {\n  position: absolute;\n  z-index: -1; // Put the input behind the label so it doesn't overlay text\n  opacity: 0;\n\n  &:checked ~ .custom-control-indicator {\n    color: $custom-control-checked-indicator-color;\n    background-color: $custom-control-checked-indicator-bg;\n    @include box-shadow($custom-control-checked-indicator-box-shadow);\n  }\n\n  &:focus ~ .custom-control-indicator {\n    // the mixin is not used here to make sure there is feedback\n    box-shadow: $custom-control-focus-indicator-box-shadow;\n  }\n\n  &:active ~ .custom-control-indicator {\n    color: $custom-control-active-indicator-color;\n    background-color: $custom-control-active-indicator-bg;\n    @include box-shadow($custom-control-active-indicator-box-shadow);\n  }\n\n  &:disabled {\n    ~ .custom-control-indicator {\n      cursor: $custom-control-disabled-cursor;\n      background-color: $custom-control-disabled-indicator-bg;\n    }\n\n    ~ .custom-control-description {\n      color: $custom-control-disabled-description-color;\n      cursor: $custom-control-disabled-cursor;\n    }\n  }\n}\n\n// Custom indicator\n//\n// Generates a shadow element to create our makeshift checkbox/radio background.\n\n.custom-control-indicator {\n  position: absolute;\n  top: .25rem;\n  left: 0;\n  display: block;\n  width: $custom-control-indicator-size;\n  height: $custom-control-indicator-size;\n  pointer-events: none;\n  user-select: none;\n  background-color: $custom-control-indicator-bg;\n  background-repeat: no-repeat;\n  background-position: center center;\n  background-size: $custom-control-indicator-bg-size;\n  @include box-shadow($custom-control-indicator-box-shadow);\n}\n\n// Checkboxes\n//\n// Tweak just a few things for checkboxes.\n\n.custom-checkbox {\n  .custom-control-indicator {\n    @include border-radius($custom-checkbox-radius);\n  }\n\n  .custom-control-input:checked ~ .custom-control-indicator {\n    background-image: $custom-checkbox-checked-icon;\n  }\n\n  .custom-control-input:indeterminate ~ .custom-control-indicator {\n    background-color: $custom-checkbox-indeterminate-bg;\n    background-image: $custom-checkbox-indeterminate-icon;\n    @include box-shadow($custom-checkbox-indeterminate-box-shadow);\n  }\n}\n\n// Radios\n//\n// Tweak just a few things for radios.\n\n.custom-radio {\n  .custom-control-indicator {\n    border-radius: $custom-radio-radius;\n  }\n\n  .custom-control-input:checked ~ .custom-control-indicator {\n    background-image: $custom-radio-checked-icon;\n  }\n}\n\n\n// Layout options\n//\n// By default radios and checkboxes are `inline-block` with no additional spacing\n// set. Use these optional classes to tweak the layout.\n\n.custom-controls-stacked {\n  .custom-control {\n    float: left;\n    clear: left;\n\n    + .custom-control {\n      margin-left: 0;\n    }\n  }\n}\n\n\n// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// http://primercss.io.\n//\n// Includes IE9-specific hacks (noted by ` \\9`).\n\n.custom-select {\n  display: inline-block;\n  max-width: 100%;\n  $select-border-width: ($border-width * 2);\n  height: calc(#{$input-height} - #{$select-border-width});\n  padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x;\n  padding-right: $custom-select-padding-x \\9;\n  color: $custom-select-color;\n  vertical-align: middle;\n  background: $custom-select-bg $custom-select-indicator no-repeat right $custom-select-padding-x center;\n  background-image: none \\9;\n  background-size: $custom-select-bg-size;\n  border: $custom-select-border-width solid $custom-select-border-color;\n  @include border-radius($custom-select-border-radius);\n  // Use vendor prefixes as `appearance` isn't part of the CSS spec.\n  -moz-appearance: none;\n  -webkit-appearance: none;\n\n  &:focus {\n    border-color: $custom-select-focus-border-color;\n    outline: none;\n    @include box-shadow($custom-select-focus-box-shadow);\n\n    &::-ms-value {\n      // For visual consistency with other platforms/browsers,\n      // supress the default white text on blue background highlight given to\n      // the selected option text when the (still closed) <select> receives focus\n      // in IE and (under certain conditions) Edge.\n      // See https://github.com/twbs/bootstrap/issues/19398.\n      color: $input-color;\n      background-color: $input-bg;\n    }\n  }\n\n  &:disabled {\n    color: $custom-select-disabled-color;\n    cursor: $cursor-disabled;\n    background-color: $custom-select-disabled-bg;\n  }\n\n  // Hides the default caret in IE11\n  &::-ms-expand {\n    opacity: 0;\n  }\n}\n\n.custom-select-sm {\n  padding-top: $custom-select-padding-y;\n  padding-bottom: $custom-select-padding-y;\n  font-size: $custom-select-sm-font-size;\n\n  // &:not([multiple]) {\n  //   height: 26px;\n  //   min-height: 26px;\n  // }\n}\n\n\n// File\n//\n// Custom file input.\n\n.custom-file {\n  position: relative;\n  display: inline-block;\n  max-width: 100%;\n  height: $custom-file-height;\n  cursor: pointer;\n}\n\n.custom-file-input {\n  min-width: $custom-file-width;\n  max-width: 100%;\n  margin: 0;\n  filter: alpha(opacity = 0);\n  opacity: 0;\n\n  &:focus ~ .custom-file-control {\n    @include box-shadow($custom-file-focus-box-shadow);\n  }\n}\n\n.custom-file-control {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 5;\n  height: $custom-file-height;\n  padding: $custom-file-padding-x $custom-file-padding-y;\n  line-height: $custom-file-line-height;\n  color: $custom-file-color;\n  user-select: none;\n  background-color: $custom-file-bg;\n  border: $custom-file-border-width solid $custom-file-border-color;\n  @include border-radius($custom-file-border-radius);\n  @include box-shadow($custom-file-box-shadow);\n\n  @each $lang, $text in map-get($custom-file-text, placeholder) {\n    &:lang(#{$lang})::after {\n      content: $text;\n    }\n  }\n\n  &::before {\n    position: absolute;\n    top: -$custom-file-border-width;\n    right: -$custom-file-border-width;\n    bottom: -$custom-file-border-width;\n    z-index: 6;\n    display: block;\n    height: $custom-file-height;\n    padding: $custom-file-padding-x $custom-file-padding-y;\n    line-height: $custom-file-line-height;\n    color: $custom-file-button-color;\n    background-color: $custom-file-button-bg;\n    border: $custom-file-border-width solid $custom-file-border-color;\n    @include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0);\n  }\n\n  @each $lang, $text in map-get($custom-file-text, button-label) {\n    &:lang(#{$lang})::before {\n      content: $text;\n    }\n  }\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s or `<ul>`s.\n\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: inline-block;\n\n  @include hover-focus {\n    text-decoration: none;\n  }\n\n  // Disabled state lightens text and removes hover/tab effects\n  &.disabled {\n    color: $nav-disabled-link-color;\n\n    @include plain-hover-focus {\n      color: $nav-disabled-link-hover-color;\n      cursor: $cursor-disabled;\n      background-color: $nav-disabled-link-hover-bg;\n    }\n  }\n}\n\n\n// Nav inline\n\n.nav-inline {\n  .nav-item {\n    display: inline-block;\n  }\n\n  .nav-item + .nav-item,\n  .nav-link + .nav-link {\n    margin-left: $nav-item-inline-spacer;\n  }\n}\n\n\n//\n// Tabs\n//\n\n.nav-tabs {\n  border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;\n  @include clearfix();\n\n  .nav-item {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -$nav-tabs-border-width;\n\n    + .nav-item {\n      margin-left: $nav-item-margin;\n    }\n  }\n\n  .nav-link {\n    display: block;\n    padding: $nav-link-padding;\n    border: $nav-tabs-border-width solid transparent;\n    @include border-top-radius($nav-tabs-border-radius);\n\n    @include hover-focus {\n      border-color: $nav-tabs-link-hover-border-color $nav-tabs-link-hover-border-color $nav-tabs-border-color;\n    }\n\n    &.disabled {\n      @include plain-hover-focus {\n        color: $nav-disabled-link-color;\n        background-color: transparent;\n        border-color: transparent;\n      }\n    }\n  }\n\n  .nav-link.active,\n  .nav-item.open .nav-link {\n    @include plain-hover-focus {\n      color: $nav-tabs-active-link-hover-color;\n      background-color: $nav-tabs-active-link-hover-bg;\n      border-color: $nav-tabs-active-link-hover-border-color $nav-tabs-active-link-hover-border-color transparent;\n    }\n  }\n\n  .dropdown-menu {\n    // Make dropdown border overlap tab border\n    margin-top: -$nav-tabs-border-width;\n    // Remove the top rounded corners here since there is a hard edge above the menu\n    @include border-top-radius(0);\n  }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n  @include clearfix();\n\n  .nav-item {\n    float: left;\n\n    + .nav-item {\n      margin-left: $nav-item-margin;\n    }\n  }\n\n  .nav-link {\n    display: block;\n    padding: $nav-link-padding;\n    @include border-radius($nav-pills-border-radius);\n  }\n\n  .nav-link.active,\n  .nav-item.open .nav-link {\n    @include plain-hover-focus {\n      color: $nav-pills-active-link-color;\n      cursor: default;\n      background-color: $nav-pills-active-link-bg;\n    }\n  }\n}\n\n.nav-stacked {\n  .nav-item {\n    display: block;\n    float: none;\n\n    + .nav-item {\n      margin-top: $nav-item-margin;\n      margin-left: 0;\n    }\n  }\n}\n\n\n//\n// Tabbable tabs\n//\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n","// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  padding: $navbar-padding-y $navbar-padding-x;\n  @include clearfix;\n\n  @include media-breakpoint-up(sm) {\n    @include border-radius($navbar-border-radius);\n  }\n}\n\n\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// A static, full width modifier with no rounded corners.\n.navbar-full {\n  z-index: $zindex-navbar;\n\n  @include media-breakpoint-up(sm) {\n    @include border-radius(0);\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: $zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @include media-breakpoint-up(sm) {\n    @include border-radius(0);\n  }\n}\n\n.navbar-fixed-top {\n  top: 0;\n}\n\n.navbar-fixed-bottom {\n  bottom: 0;\n}\n\n.navbar-sticky-top {\n  position: sticky;\n  top: 0;\n  z-index: $zindex-navbar-sticky;\n  width: 100%;\n\n  // Undo the rounded corners\n  @include media-breakpoint-up(sm) {\n    @include border-radius(0);\n  }\n}\n\n\n//\n// Brand/project name\n//\n\n.navbar-brand {\n  float: left;\n  padding-top: $navbar-brand-padding-y;\n  padding-bottom: $navbar-brand-padding-y;\n  margin-right: 1rem;\n  font-size: $font-size-lg;\n  line-height: inherit;\n\n  @include hover-focus {\n    text-decoration: none;\n  }\n}\n\n\n.navbar-divider {\n  float: left;\n  width: $border-width;\n  padding-top: $navbar-divider-padding-y;\n  padding-bottom: $navbar-divider-padding-y;\n  margin-right: $navbar-padding-x;\n  margin-left:  $navbar-padding-x;\n  overflow: hidden;\n\n  &::before {\n    content: \"\\00a0\";\n  }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n  display: inline-block;\n  padding-top:    .425rem;\n  padding-bottom: .425rem;\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// Bootstrap JavaScript plugin.\n\n.navbar-toggler {\n  width: 2.5em;\n  height: 2em;\n  padding: $navbar-toggler-padding-y $navbar-toggler-padding-x;\n  font-size: $navbar-toggler-font-size;\n  line-height: 1;\n  background: transparent no-repeat center center;\n  background-size: 24px 24px;\n  border: $border-width solid transparent;\n  @include border-radius($navbar-toggler-border-radius);\n\n  @include hover-focus {\n    text-decoration: none;\n  }\n}\n\n// scss-lint:disable ImportantRule\n.navbar-toggleable {\n  @each $breakpoint in map-keys($grid-breakpoints) {\n    $next: breakpoint-next($breakpoint, $grid-breakpoints);\n\n    &-#{$breakpoint} {\n      @include clearfix;\n\n      @include media-breakpoint-down($breakpoint) {\n        .navbar-brand {\n          display: block;\n          float: none;\n          margin-top: .5rem;\n          margin-right: 0;\n        }\n\n        .navbar-nav {\n          margin-top: .5rem;\n          margin-bottom: .5rem;\n\n          .dropdown-menu {\n            position: static;\n            float: none;\n          }\n        }\n      }\n\n      @include media-breakpoint-up($next) {\n        display: block;\n      }\n    }\n  }\n}\n// scss-lint:enable ImportantRule\n\n\n// Navigation\n//\n// Custom navbar navigation built on the base `.nav` styles.\n\n.navbar-nav {\n  .nav-item {\n    float: left;\n  }\n\n  .nav-link {\n    display: block;\n    padding-top:    .425rem;\n    padding-bottom: .425rem;\n\n    + .nav-link {\n      margin-left: 1rem;\n    }\n  }\n\n  .nav-item + .nav-item {\n    margin-left: 1rem;\n  }\n}\n\n// Dark links against a light background\n.navbar-light {\n  .navbar-brand,\n  .navbar-toggler {\n    color: $navbar-light-active-color;\n\n    @include hover-focus {\n      color: $navbar-light-active-color;\n    }\n  }\n\n  .navbar-nav {\n    .nav-link {\n      color: $navbar-light-color;\n\n      @include hover-focus {\n        color: $navbar-light-hover-color;\n      }\n    }\n\n    .open > .nav-link,\n    .active > .nav-link,\n    .nav-link.open,\n    .nav-link.active {\n      @include plain-hover-focus {\n        color: $navbar-light-active-color;\n      }\n    }\n  }\n\n  .navbar-toggler {\n    background-image: $navbar-light-toggler-bg;\n    border-color: $navbar-light-toggler-border;\n  }\n\n  .navbar-divider {\n    background-color: rgba(0,0,0,.075);\n  }\n}\n\n// White links against a dark background\n.navbar-dark {\n  .navbar-brand,\n  .navbar-toggler {\n    color: $navbar-dark-active-color;\n\n    @include hover-focus {\n      color: $navbar-dark-active-color;\n    }\n  }\n\n  .navbar-nav {\n    .nav-link {\n      color: $navbar-dark-color;\n\n      @include hover-focus {\n        color: $navbar-dark-hover-color;\n      }\n    }\n\n    .open > .nav-link,\n    .active > .nav-link,\n    .nav-link.open,\n    .nav-link.active {\n      @include plain-hover-focus {\n        color: $navbar-dark-active-color;\n      }\n    }\n  }\n\n  .navbar-toggler {\n    background-image: $navbar-dark-toggler-bg;\n    border-color: $navbar-dark-toggler-border;\n  }\n\n  .navbar-divider {\n    background-color: rgba(255,255,255,.075);\n  }\n}\n\n\n// Navbar toggleable\n//\n// Custom override for collapse plugin in navbar.\n\n.navbar-toggleable {\n  &-xs {\n    @include clearfix;\n    @include media-breakpoint-down(xs) {\n      .navbar-nav .nav-item {\n        float: none;\n        margin-left: 0;\n      }\n    }\n    @include media-breakpoint-up(sm) {\n      display: block !important;\n    }\n  }\n\n  &-sm {\n    @include clearfix;\n    @include media-breakpoint-down(sm) {\n      .navbar-nav .nav-item {\n        float: none;\n        margin-left: 0;\n      }\n    }\n    @include media-breakpoint-up(md) {\n      display: block !important;\n    }\n  }\n\n  &-md {\n    @include clearfix;\n    @include media-breakpoint-down(md) {\n      .navbar-nav .nav-item {\n        float: none;\n        margin-left: 0;\n      }\n    }\n    @include media-breakpoint-up(lg) {\n      display: block !important;\n    }\n  }\n}\n","//\n// Base styles\n//\n\n.card {\n  position: relative;\n  display: block;\n  margin-bottom: $card-spacer-y;\n  background-color: $card-bg;\n  // border: $card-border-width solid $card-border-color;\n  @include border-radius($card-border-radius);\n  border: $card-border-width solid $card-border-color;\n}\n\n.card-block {\n  @include clearfix;\n  padding: $card-spacer-x;\n}\n\n.card-title {\n  margin-bottom: $card-spacer-y;\n}\n\n.card-subtitle {\n  margin-top: -($card-spacer-y / 2);\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n// .card-actions {\n//   padding: $card-spacer-y $card-spacer-x;\n\n//   .card-link + .card-link {\n//     margin-left: $card-spacer-x;\n//   }\n// }\n\n.card-link {\n  @include hover {\n    text-decoration: none;\n  }\n\n  + .card-link {\n    margin-left: $card-spacer-x;\n  }\n}\n\n.card {\n  > .list-group:first-child {\n    .list-group-item:first-child {\n      @include border-top-radius($card-border-radius);\n    }\n  }\n\n  > .list-group:last-child {\n    .list-group-item:last-child {\n      @include border-bottom-radius($card-border-radius);\n    }\n  }\n}\n\n\n//\n// Optional textual caps\n//\n\n.card-header {\n  @include clearfix;\n  padding: $card-spacer-y $card-spacer-x;\n  margin-bottom: 0; // Removes the default margin-bottom of <hN>\n  background-color: $card-cap-bg;\n  border-bottom: $card-border-width solid $card-border-color;\n\n  &:first-child {\n    @include border-radius($card-border-radius-inner $card-border-radius-inner 0 0);\n  }\n}\n\n.card-footer {\n  @include clearfix;\n  padding: $card-spacer-y $card-spacer-x;\n  background-color: $card-cap-bg;\n  border-top: $card-border-width solid $card-border-color;\n\n  &:last-child {\n    @include border-radius(0 0 $card-border-radius-inner $card-border-radius-inner);\n  }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n  margin-right: -($card-spacer-x / 2);\n  margin-bottom: -$card-spacer-y;\n  margin-left: -($card-spacer-x / 2);\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -($card-spacer-x / 2);\n  margin-left: -($card-spacer-x / 2);\n}\n\n\n//\n// Background variations\n//\n\n.card-primary {\n  @include card-variant($brand-primary, $brand-primary);\n}\n.card-success {\n  @include card-variant($brand-success, $brand-success);\n}\n.card-info {\n  @include card-variant($brand-info, $brand-info);\n}\n.card-warning {\n  @include card-variant($brand-warning, $brand-warning);\n}\n.card-danger {\n  @include card-variant($brand-danger, $brand-danger);\n}\n\n// Remove all backgrounds\n.card-outline-primary {\n  @include card-outline-variant($btn-primary-bg);\n}\n.card-outline-secondary {\n  @include card-outline-variant($btn-secondary-border);\n}\n.card-outline-info {\n  @include card-outline-variant($btn-info-bg);\n}\n.card-outline-success {\n  @include card-outline-variant($btn-success-bg);\n}\n.card-outline-warning {\n  @include card-outline-variant($btn-warning-bg);\n}\n.card-outline-danger {\n  @include card-outline-variant($btn-danger-bg);\n}\n\n//\n// Inverse text within a card for use with dark backgrounds\n//\n\n.card-inverse {\n  @include card-inverse;\n}\n\n//\n// Blockquote\n//\n\n.card-blockquote {\n  padding: 0;\n  margin-bottom: 0;\n  border-left: 0;\n}\n\n// Card image\n.card-img {\n  // margin: -1.325rem;\n  @include border-radius($card-border-radius-inner);\n}\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: $card-img-overlay-padding;\n}\n\n\n\n// Card image caps\n.card-img-top {\n  @include border-top-radius($card-border-radius-inner);\n}\n.card-img-bottom {\n  @include border-bottom-radius($card-border-radius-inner);\n}\n\n\n// Card set\n//\n// Heads up! We do some funky style resetting here for margins across our two\n// variations (one flex, one table). Individual cards have margin-bottom by\n// default, but they're ignored due to table styles. For a consistent design,\n// we've done the same to the flex variation.\n//\n// Those changes are noted by `// Margin balancing`.\n\n@if $enable-flex {\n  @include media-breakpoint-up(sm) {\n    .card-deck {\n      display: flex;\n      flex-flow: row wrap;\n      margin-right: -$card-deck-margin;\n      margin-bottom: $card-spacer-y; // Margin balancing\n      margin-left: -$card-deck-margin;\n\n      .card {\n        flex: 1 0 0;\n        margin-right: $card-deck-margin;\n        margin-bottom: 0; // Margin balancing\n        margin-left: $card-deck-margin;\n      }\n    }\n  }\n} @else {\n  @include media-breakpoint-up(sm) {\n    $space-between-cards: (2 * $card-deck-margin);\n    .card-deck {\n      display: table;\n      width: 100%;\n      margin-bottom: $card-spacer-y; // Margin balancing\n      table-layout: fixed;\n      border-spacing: $space-between-cards 0;\n\n      .card {\n        display: table-cell;\n        margin-bottom: 0; // Margin balancing\n        vertical-align: top;\n      }\n    }\n    .card-deck-wrapper {\n      margin-right: (-$space-between-cards);\n      margin-left: (-$space-between-cards);\n    }\n  }\n}\n\n//\n// Card groups\n//\n\n@include media-breakpoint-up(sm) {\n  .card-group {\n    @if $enable-flex {\n      display: flex;\n      flex-flow: row wrap;\n    } @else {\n      display: table;\n      width: 100%;\n      table-layout: fixed;\n    }\n\n    .card {\n      @if $enable-flex {\n        flex: 1 0 0;\n      } @else {\n        display: table-cell;\n        vertical-align: top;\n      }\n\n      + .card {\n        margin-left: 0;\n        border-left: 0;\n      }\n\n      // Handle rounded corners\n      @if $enable-rounded {\n        &:first-child {\n          @include border-right-radius(0);\n\n          .card-img-top {\n            border-top-right-radius: 0;\n          }\n          .card-img-bottom {\n            border-bottom-right-radius: 0;\n          }\n        }\n        &:last-child {\n          @include border-left-radius(0);\n\n          .card-img-top {\n            border-top-left-radius: 0;\n          }\n          .card-img-bottom {\n            border-bottom-left-radius: 0;\n          }\n        }\n\n        &:not(:first-child):not(:last-child) {\n          border-radius: 0;\n\n          .card-img-top,\n          .card-img-bottom {\n            border-radius: 0;\n          }\n        }\n      }\n    }\n  }\n}\n\n\n//\n// Card\n//\n\n@include media-breakpoint-up(sm) {\n  .card-columns {\n    column-count: 3;\n    column-gap: $card-columns-sm-up-column-gap;\n\n    .card {\n      display: inline-block; // Don't let them vertically span multiple columns\n      width: 100%; // Don't let them exceed the column width\n    }\n  }\n}\n","// Card variants\n\n@mixin card-variant($background, $border) {\n  background-color: $background;\n  border-color: $border;\n\n  .card-header,\n  .card-footer {\n    background-color: transparent;\n  }\n}\n\n@mixin card-outline-variant($color) {\n  background-color: transparent;\n  border-color: $color;\n}\n\n//\n// Inverse text within a card for use with dark backgrounds\n//\n\n@mixin card-inverse {\n  .card-header,\n  .card-footer {\n    border-color: rgba(255,255,255,.2);\n  }\n  .card-header,\n  .card-footer,\n  .card-title,\n  .card-blockquote {\n    color: #fff;\n  }\n  .card-link,\n  .card-text,\n  .card-subtitle,\n  .card-blockquote .blockquote-footer {\n    color: rgba(255,255,255,.65);\n  }\n  .card-link {\n    @include hover-focus {\n      color: $card-link-hover-color;\n    }\n  }\n}\n",".breadcrumb {\n  padding: $breadcrumb-padding-y $breadcrumb-padding-x;\n  margin-bottom: $spacer-y;\n  list-style: none;\n  background-color: $breadcrumb-bg;\n  @include border-radius($border-radius);\n  @include clearfix;\n}\n\n.breadcrumb-item {\n  float: left;\n\n  // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n  + .breadcrumb-item::before {\n    display: inline-block; // Suppress underlining of the separator in modern browsers\n    padding-right: $breadcrumb-item-padding;\n    padding-left: $breadcrumb-item-padding;\n    color: $breadcrumb-divider-color;\n    content: \"#{$breadcrumb-divider}\";\n  }\n\n  // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built\n  // without `<ul>`s. The `::before` pseudo-element generates an element\n  // *within* the .breadcrumb-item and thereby inherits the `text-decoration`.\n  //\n  // To trick IE into suppressing the underline, we give the pseudo-element an\n  // underline and then immediately remove it.\n  + .breadcrumb-item:hover::before {\n    text-decoration: underline;\n  }\n  + .breadcrumb-item:hover::before {\n    text-decoration: none;\n  }\n\n  &.active {\n    color: $breadcrumb-active-color;\n  }\n}\n",".pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin-top: $spacer-y;\n  margin-bottom: $spacer-y;\n  @include border-radius();\n}\n\n.page-item {\n  display: inline; // Remove list-style and block-level defaults\n\n  &:first-child {\n    .page-link {\n      margin-left: 0;\n      @include border-left-radius($border-radius);\n    }\n  }\n  &:last-child {\n    .page-link {\n      @include border-right-radius($border-radius);\n    }\n  }\n\n  &.active .page-link {\n    @include plain-hover-focus {\n      z-index: 2;\n      color: $pagination-active-color;\n      cursor: default;\n      background-color: $pagination-active-bg;\n      border-color: $pagination-active-border;\n    }\n  }\n\n  &.disabled .page-link {\n    @include plain-hover-focus {\n      color: $pagination-disabled-color;\n      pointer-events: none;\n      cursor: $cursor-disabled;\n      background-color: $pagination-disabled-bg;\n      border-color: $pagination-disabled-border;\n    }\n  }\n}\n\n.page-link {\n  position: relative;\n  float: left; // Collapse white-space\n  padding: $pagination-padding-y $pagination-padding-x;\n  margin-left: -1px;\n  color: $pagination-color;\n  text-decoration: none;\n  background-color: $pagination-bg;\n  border: $pagination-border-width solid $pagination-border-color;\n\n  @include hover-focus {\n    color: $pagination-hover-color;\n    background-color: $pagination-hover-bg;\n    border-color: $pagination-hover-border;\n  }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n  @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $border-radius-lg);\n}\n\n.pagination-sm {\n  @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $border-radius-sm);\n}\n","// Pagination\n\n@mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n  .page-link {\n    padding: $padding-y $padding-x;\n    font-size: $font-size;\n  }\n\n  .page-item {\n    &:first-child {\n      .page-link {\n        @include border-left-radius($border-radius);\n      }\n    }\n    &:last-child {\n      .page-link {\n        @include border-right-radius($border-radius);\n      }\n    }\n  }\n}\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.tag {\n  display: inline-block;\n  padding: $tag-padding-y $tag-padding-x;\n  font-size: $tag-font-size;\n  font-weight: $tag-font-weight;\n  line-height: 1;\n  color: $tag-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  @include border-radius();\n\n  // Empty tags collapse automatically\n  &:empty {\n    display: none;\n  }\n}\n\n// Quick fix for tags in buttons\n.btn .tag {\n  position: relative;\n  top: -1px;\n}\n\n// scss-lint:disable QualifyingElement\n// Add hover effects, but only for links\na.tag {\n  @include hover-focus {\n    color: $tag-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n// scss-lint:enable QualifyingElement\n\n// Pill tags\n//\n// Make them extra rounded with a modifier to replace v3's badges.\n\n.tag-pill {\n  padding-right: $tag-pill-padding-x;\n  padding-left: $tag-pill-padding-x;\n  @include border-radius($tag-pill-border-radius);\n}\n\n// Colors\n//\n// Contextual variations (linked tags get darker on :hover).\n\n.tag-default {\n  @include tag-variant($tag-default-bg);\n}\n\n.tag-primary {\n  @include tag-variant($tag-primary-bg);\n}\n\n.tag-success {\n  @include tag-variant($tag-success-bg);\n}\n\n.tag-info {\n  @include tag-variant($tag-info-bg);\n}\n\n.tag-warning {\n  @include tag-variant($tag-warning-bg);\n}\n\n.tag-danger {\n  @include tag-variant($tag-danger-bg);\n}\n","// Tags\n\n@mixin tag-variant($color) {\n  background-color: $color;\n\n  &[href] {\n    @include hover-focus {\n      background-color: darken($color, 10%);\n    }\n  }\n}\n",".jumbotron {\n  padding: $jumbotron-padding ($jumbotron-padding / 2);\n  margin-bottom: $jumbotron-padding;\n  background-color: $jumbotron-bg;\n  @include border-radius($border-radius-lg);\n\n  @include media-breakpoint-up(sm) {\n    padding: ($jumbotron-padding * 2) $jumbotron-padding;\n  }\n}\n\n.jumbotron-hr {\n  border-top-color: darken($jumbotron-bg, 10%);\n}\n\n.jumbotron-fluid {\n  padding-right: 0;\n  padding-left: 0;\n  @include border-radius(0);\n}\n","//\n// Base styles\n//\n\n.alert {\n  padding: $alert-padding-y $alert-padding-x;\n  margin-bottom: $spacer-y;\n  border: $alert-border-width solid transparent;\n  @include border-radius($alert-border-radius);\n}\n\n// Headings for larger alerts\n.alert-heading {\n  // Specified to prevent conflicts of changing $headings-color\n  color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n  font-weight: $alert-link-font-weight;\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n  padding-right: ($alert-padding-x * 2);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -.125rem;\n    right: -$alert-padding-x;\n    color: inherit;\n  }\n}\n\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);\n}\n.alert-info {\n  @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);\n}\n.alert-warning {\n  @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text);\n}\n.alert-danger {\n  @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text);\n}\n","// Alerts\n\n@mixin alert-variant($background, $border, $body-color) {\n  background-color: $background;\n  border-color: $border;\n  color: $body-color;\n\n  hr {\n    border-top-color: darken($border, 5%);\n  }\n  .alert-link {\n    color: darken($body-color, 10%);\n  }\n}\n","// Gradients\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n// Color stops are not available in IE9.\n@mixin gradient-x($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {\n  background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n// Color stops are not available in IE9.\n@mixin gradient-y($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {\n  background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9\n}\n\n@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) {\n  background-repeat: repeat-x;\n  background-image: linear-gradient($deg, $start-color, $end-color);\n}\n@mixin gradient-x-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {\n  background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n  background-repeat: no-repeat;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 gets no color-stop at all for proper fallback\n}\n@mixin gradient-y-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {\n  background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n  background-repeat: no-repeat;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 gets no color-stop at all for proper fallback\n}\n@mixin gradient-radial($inner-color: #555, $outer-color: #333) {\n  background-image: radial-gradient(circle, $inner-color, $outer-color);\n  background-repeat: no-repeat;\n}\n@mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) {\n  background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}","// Progress bars\n\n@mixin progress-variant($color) {\n  &[value]::-webkit-progress-value {\n    background-color: $color;\n  }\n\n  &[value]::-moz-progress-bar {\n    background-color: $color;\n  }\n\n  // IE10+, Microsoft Edge\n  &[value]::-ms-fill {\n    background-color: $color;\n  }\n\n  // IE9\n  @media screen and (min-width:0\\0) {\n    .progress-bar {\n      background-color: $color;\n    }\n  }\n}\n","@if $enable-flex {\n  .media {\n    display: flex;\n  }\n  .media-body {\n    flex: 1;\n  }\n  .media-middle {\n    align-self: center;\n  }\n  .media-bottom {\n    align-self: flex-end;\n  }\n} @else {\n  .media,\n  .media-body {\n    overflow: hidden;\n  }\n  .media-body {\n    width: 10000px;\n  }\n  .media-left,\n  .media-right,\n  .media-body {\n    display: table-cell;\n    vertical-align: top;\n  }\n  .media-middle {\n    vertical-align: middle;\n  }\n  .media-bottom {\n    vertical-align: bottom;\n  }\n}\n\n\n//\n// Images/elements as the media anchor\n//\n\n.media-object {\n  display: block;\n\n  // Fix collapse in webkit from max-width: 100% and display: table-cell.\n  &.img-thumbnail {\n    max-width: none;\n  }\n}\n\n\n//\n// Alignment\n//\n\n.media-right {\n  padding-left: $media-alignment-padding-x;\n}\n\n.media-left {\n  padding-right: $media-alignment-padding-x;\n}\n\n\n//\n// Headings\n//\n\n.media-heading {\n  margin-top: 0;\n  margin-bottom: $media-heading-margin-bottom;\n}\n\n\n//\n// Media list variation\n//\n\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n  // No need to set list-style: none; since .list-group-item is block level\n  padding-left: 0; // reset padding because ul and ol\n  margin-bottom: 0;\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: $list-group-item-padding-y $list-group-item-padding-x;\n  // Place the border on the list items and negative margin up for better styling\n  margin-bottom: -$list-group-border-width;\n  background-color: $list-group-bg;\n  border: $list-group-border-width solid $list-group-border-color;\n\n  &:first-child {\n    @include border-top-radius($list-group-border-radius);\n  }\n\n  &:last-child {\n    margin-bottom: 0;\n    @include border-bottom-radius($list-group-border-radius);\n  }\n\n  &.disabled {\n    @include plain-hover-focus {\n      color: $list-group-disabled-color;\n      cursor: $cursor-disabled;\n      background-color: $list-group-disabled-bg;\n\n      // Force color to inherit for custom content\n      .list-group-item-heading {\n        color: inherit;\n      }\n      .list-group-item-text {\n        color: $list-group-disabled-text-color;\n      }\n    }\n  }\n\n  &.active {\n    @include plain-hover-focus {\n      z-index: 2; // Place active items above their siblings for proper border styling\n      color: $list-group-active-color;\n      text-decoration: none; // Repeat here because it inherits global a:hover otherwise\n      background-color: $list-group-active-bg;\n      border-color: $list-group-active-border;\n\n      // Force color to inherit for custom content\n      .list-group-item-heading,\n      .list-group-item-heading > small,\n      .list-group-item-heading > .small {\n        color: inherit;\n      }\n      .list-group-item-text {\n        color: $list-group-active-text-color;\n      }\n    }\n  }\n}\n\n.list-group-flush {\n  .list-group-item {\n    border-right: 0;\n    border-left: 0;\n    border-radius: 0;\n  }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n  width: 100%; // For `<button>`s (anchors become 100% by default though)\n  color: $list-group-link-color;\n  text-align: inherit; // For `<button>`s (anchors inherit)\n\n  .list-group-item-heading {\n    color: $list-group-link-heading-color;\n  }\n\n  // Hover state\n  @include hover-focus {\n    color: $list-group-link-hover-color;\n    text-decoration: none;\n    background-color: $list-group-hover-bg;\n  }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@include list-group-item-variant(success, $state-success-bg, $state-success-text);\n@include list-group-item-variant(info, $state-info-bg, $state-info-text);\n@include list-group-item-variant(warning, $state-warning-bg, $state-warning-text);\n@include list-group-item-variant(danger, $state-danger-bg, $state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: $list-group-item-heading-margin-bottom;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n","// List Groups\n\n@mixin list-group-item-variant($state, $background, $color) {\n  .list-group-item-#{$state} {\n    color: $color;\n    background-color: $background;\n  }\n\n  a.list-group-item-#{$state},\n  button.list-group-item-#{$state} {\n    color: $color;\n\n    .list-group-item-heading {\n      color: inherit;\n    }\n\n    @include hover-focus {\n      color: $color;\n      background-color: darken($background, 5%);\n    }\n\n    &.active {\n      @include plain-hover-focus {\n        color: #fff;\n        background-color: $color;\n        border-color: $color;\n      }\n    }\n  }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n\n  .embed-responsive-item,\n  iframe,\n  embed,\n  object,\n  video {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    border: 0;\n  }\n}\n\n.embed-responsive-21by9 {\n  padding-bottom: percentage(9 / 21);\n}\n\n.embed-responsive-16by9 {\n  padding-bottom: percentage(9 / 16);\n}\n\n.embed-responsive-4by3 {\n  padding-bottom: percentage(3 / 4);\n}\n\n.embed-responsive-1by1 {\n  padding-bottom: percentage(1 / 1);\n}\n",".close {\n  float: right;\n  font-size: ($font-size-base * 1.5);\n  font-weight: $close-font-weight;\n  line-height: 1;\n  color: $close-color;\n  text-shadow: $close-text-shadow;\n  opacity: .2;\n\n  @include hover-focus {\n    color: $close-color;\n    text-decoration: none;\n    cursor: pointer;\n    opacity: .5;\n  }\n}\n\n// Additional properties for button version\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n// scss-lint:disable QualifyingElement\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n// scss-lint:enable QualifyingElement\n","// .modal-open      - body class for killing the scroll\n// .modal           - container to scroll within\n// .modal-dialog    - positioning shell for the actual modal\n// .modal-content   - actual modal w/ bg and corners and stuff\n\n\n// Kill the scroll on the body\n.modal-open {\n  overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: $zindex-modal;\n  display: none;\n  overflow: hidden;\n  // Prevent Chrome on Windows from adding a focus outline. For details, see\n  // https://github.com/twbs/bootstrap/pull/10951.\n  outline: 0;\n  // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n  // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n  // See also https://github.com/twbs/bootstrap/issues/17695\n\n  // When fading in the modal, animate it to slide down\n  &.fade .modal-dialog {\n    transition: transform .3s ease-out;\n    transform: translate(0, -25%);\n  }\n  &.in .modal-dialog { transform: translate(0, 0); }\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: $modal-dialog-margin;\n}\n\n// Actual modal\n.modal-content {\n  position: relative;\n  background-color: $modal-content-bg;\n  background-clip: padding-box;\n  border: $modal-content-border-width solid $modal-content-border-color;\n  @include border-radius($border-radius-lg);\n  @include box-shadow($modal-content-xs-box-shadow);\n  // Remove focus outline from opened modal\n  outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: $zindex-modal-bg;\n  background-color: $modal-backdrop-bg;\n\n  // Fade for backdrop\n  &.fade { opacity: 0; }\n  &.in { opacity: $modal-backdrop-opacity; }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n  padding: $modal-title-padding;\n  border-bottom: $modal-header-border-width solid $modal-header-border-color;\n  @include clearfix;\n}\n// Close icon\n.modal-header .close {\n  margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n  margin: 0;\n  line-height: $modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n  position: relative;\n  padding: $modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n  padding: $modal-inner-padding;\n  text-align: right; // right align buttons\n  border-top: $modal-footer-border-width solid $modal-footer-border-color;\n  @include clearfix(); // clear it in case folks use .pull-* classes on buttons\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n  // Automatically set modal's width for larger viewports\n  .modal-dialog {\n    max-width: $modal-md;\n    margin: $modal-dialog-sm-up-margin-y auto;\n  }\n\n  .modal-content {\n    @include box-shadow($modal-content-sm-up-box-shadow);\n  }\n\n  .modal-sm { max-width: $modal-sm; }\n}\n\n@include media-breakpoint-up(lg) {\n  .modal-lg { max-width: $modal-lg; }\n}\n","// Base class\n.tooltip {\n  position: absolute;\n  z-index: $zindex-tooltip;\n  display: block;\n  // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n  // So reset our font and text properties to avoid inheriting weird values.\n  @include reset-text();\n  font-size: $font-size-sm;\n  // Allow breaking very long words so they don't overflow the tooltip's bounds\n  word-wrap: break-word;\n  opacity: 0;\n\n  &.in { opacity: $tooltip-opacity; }\n\n  &.tooltip-top,\n  &.bs-tether-element-attached-bottom {\n    padding: $tooltip-arrow-width 0;\n    margin-top: -$tooltip-margin;\n\n    .tooltip-inner::before {\n      bottom: 0;\n      left: 50%;\n      margin-left: -$tooltip-arrow-width;\n      content: \"\";\n      border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n      border-top-color: $tooltip-arrow-color;\n    }\n  }\n  &.tooltip-right,\n  &.bs-tether-element-attached-left {\n    padding: 0 $tooltip-arrow-width;\n    margin-left: $tooltip-margin;\n\n    .tooltip-inner::before {\n      top: 50%;\n      left: 0;\n      margin-top: -$tooltip-arrow-width;\n      content: \"\";\n      border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0;\n      border-right-color: $tooltip-arrow-color;\n    }\n  }\n  &.tooltip-bottom,\n  &.bs-tether-element-attached-top {\n    padding: $tooltip-arrow-width 0;\n    margin-top: $tooltip-margin;\n\n    .tooltip-inner::before {\n      top: 0;\n      left: 50%;\n      margin-left: -$tooltip-arrow-width;\n      content: \"\";\n      border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n      border-bottom-color: $tooltip-arrow-color;\n    }\n  }\n  &.tooltip-left,\n  &.bs-tether-element-attached-right {\n    padding: 0 $tooltip-arrow-width;\n    margin-left: -$tooltip-margin;\n\n    .tooltip-inner::before {\n      top: 50%;\n      right: 0;\n      margin-top: -$tooltip-arrow-width;\n      content: \"\";\n      border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width;\n      border-left-color: $tooltip-arrow-color;\n    }\n  }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n  max-width: $tooltip-max-width;\n  padding: $tooltip-padding-y $tooltip-padding-x;\n  color: $tooltip-color;\n  text-align: center;\n  background-color: $tooltip-bg;\n  @include border-radius($border-radius);\n\n  &::before {\n    position: absolute;\n    width: 0;\n    height: 0;\n    border-color: transparent;\n    border-style: solid;\n  }\n}\n","@mixin reset-text {\n  font-family: $font-family-base;\n  // We deliberately do NOT reset font-size or word-wrap.\n  font-style: normal;\n  font-weight: normal;\n  letter-spacing: normal;\n  line-break: auto;\n  line-height: $line-height-base;\n  text-align: left; // Fallback for where `start` is not supported\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  white-space: normal;\n  word-break: normal;\n  word-spacing: normal;\n}\n",".popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: $zindex-popover;\n  display: block;\n  max-width: $popover-max-width;\n  padding: $popover-inner-padding;\n  // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n  // So reset our font and text properties to avoid inheriting weird values.\n  @include reset-text();\n  font-size: $font-size-sm;\n  // Allow breaking very long words so they don't overflow the popover's bounds\n  word-wrap: break-word;\n  background-color: $popover-bg;\n  background-clip: padding-box;\n  border: $popover-border-width solid $popover-border-color;\n  @include border-radius($border-radius-lg);\n  @include box-shadow($popover-box-shadow);\n\n\n  // Popover directions\n\n  &.popover-top,\n  &.bs-tether-element-attached-bottom {\n    margin-top: -$popover-arrow-width;\n\n    &::before,\n    &::after {\n      left: 50%;\n      border-bottom-width: 0;\n    }\n\n    &::before {\n      bottom: -$popover-arrow-outer-width;\n      margin-left: -$popover-arrow-outer-width;\n      border-top-color: $popover-arrow-outer-color;\n    }\n\n    &::after {\n      bottom: -($popover-arrow-outer-width - 1);\n      margin-left: -$popover-arrow-width;\n      border-top-color: $popover-arrow-color;\n    }\n  }\n\n  &.popover-right,\n  &.bs-tether-element-attached-left {\n    margin-left: $popover-arrow-width;\n\n    &::before,\n    &::after {\n      top: 50%;\n      border-left-width: 0;\n    }\n\n    &::before {\n      left: -$popover-arrow-outer-width;\n      margin-top: -$popover-arrow-outer-width;\n      border-right-color: $popover-arrow-outer-color;\n    }\n\n    &::after {\n      left: -($popover-arrow-outer-width - 1);\n      margin-top: -($popover-arrow-outer-width - 1);\n      border-right-color: $popover-arrow-color;\n    }\n  }\n\n  &.popover-bottom,\n  &.bs-tether-element-attached-top {\n    margin-top: $popover-arrow-width;\n\n    &::before,\n    &::after {\n      left: 50%;\n      border-top-width: 0;\n    }\n\n    &::before {\n      top: -$popover-arrow-outer-width;\n      margin-left: -$popover-arrow-outer-width;\n      border-bottom-color: $popover-arrow-outer-color;\n    }\n\n    &::after {\n      top: -($popover-arrow-outer-width - 1);\n      margin-left: -$popover-arrow-width;\n      border-bottom-color: $popover-title-bg;\n    }\n\n    // This will remove the popover-title's border just below the arrow\n    .popover-title::before {\n      position: absolute;\n      top: 0;\n      left: 50%;\n      display: block;\n      width: 20px;\n      margin-left: -10px;\n      content: \"\";\n      border-bottom: 1px solid $popover-title-bg;\n    }\n  }\n\n  &.popover-left,\n  &.bs-tether-element-attached-right {\n    margin-left: -$popover-arrow-width;\n\n    &::before,\n    &::after {\n      top: 50%;\n      border-right-width: 0;\n    }\n\n    &::before {\n      right: -$popover-arrow-outer-width;\n      margin-top: -$popover-arrow-outer-width;\n      border-left-color: $popover-arrow-outer-color;\n    }\n\n    &::after {\n      right: -($popover-arrow-outer-width - 1);\n      margin-top: -($popover-arrow-outer-width - 1);\n      border-left-color: $popover-arrow-color;\n    }\n  }\n}\n\n\n// Offset the popover to account for the popover arrow\n.popover-title {\n  padding: $popover-title-padding-y $popover-title-padding-x;\n  margin: 0; // reset heading margin\n  font-size: $font-size-base;\n  background-color: $popover-title-bg;\n  border-bottom: $popover-border-width solid darken($popover-title-bg, 5%);\n  $offset-border-width: ($border-width / $font-size-root);\n  @include border-radius(($border-radius-lg - $offset-border-width) ($border-radius-lg - $offset-border-width) 0 0);\n\n  &:empty {\n    display: none;\n  }\n}\n\n.popover-content {\n  padding: $popover-content-padding-y $popover-content-padding-x;\n}\n\n\n// Arrows\n//\n// .popover-arrow is outer, .popover-arrow::after is inner\n\n.popover::before,\n.popover::after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.popover::before {\n  content: \"\";\n  border-width: $popover-arrow-outer-width;\n}\n.popover::after {\n  content: \"\";\n  border-width: $popover-arrow-width;\n}\n","// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n\n  > .carousel-item {\n    position: relative;\n    display: none;\n    transition: .6s ease-in-out left;\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      @extend .img-fluid;\n      line-height: 1;\n    }\n\n    // WebKit CSS3 transforms for supported devices\n    @media all and (transform-3d), (-webkit-transform-3d) {\n      transition: transform .6s ease-in-out;\n      backface-visibility: hidden;\n      perspective: 1000px;\n\n      &.next,\n      &.active.right {\n        left: 0;\n        transform: translate3d(100%, 0, 0);\n      }\n      &.prev,\n      &.active.left {\n        left: 0;\n        transform: translate3d(-100%, 0, 0);\n      }\n      &.next.left,\n      &.prev.right,\n      &.active {\n        left: 0;\n        transform: translate3d(0, 0, 0);\n      }\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev {\n    display: block;\n  }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: $carousel-control-width;\n  font-size: $carousel-control-font-size;\n  color: $carousel-control-color;\n  text-align: center;\n  text-shadow: $carousel-text-shadow;\n  opacity: $carousel-control-opacity;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    @include gradient-x($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    right: 0;\n    left: auto;\n    @include gradient-x($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  @include hover-focus {\n    color: $carousel-control-color;\n    text-decoration: none;\n    outline: 0;\n    opacity: .9;\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n    width: $carousel-icon-width;\n    height: $carousel-icon-width;\n    margin-top: -($carousel-icon-width / 2);\n    font-family: serif;\n    line-height: 1;\n  }\n  .icon-prev {\n    left: 50%;\n    margin-left: -($carousel-icon-width / 2);\n  }\n  .icon-next {\n    right: 50%;\n    margin-right: -($carousel-icon-width / 2);\n  }\n\n  .icon-prev {\n    &::before {\n      content: \"\\2039\";// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &::before {\n      content: \"\\203a\";// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: $carousel-indicators-width;\n  padding-left: 0;\n  margin-left: -($carousel-indicators-width / 2);\n  text-align: center;\n  list-style: none;\n\n  li {\n    display: inline-block;\n    width: $carousel-indicator-size;\n    height: $carousel-indicator-size;\n    margin: 1px;\n    text-indent: -999px;\n    cursor: pointer;\n    // IE9 hack for event handling\n    //\n    // Internet Explorer 9 does not properly handle clicks on elements with a `background-color` of `transparent`,\n    // so we use `rgba(0,0,0,0)` instead since it's a non-buggy equivalent.\n    // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n    background-color: rgba(0,0,0,0); // IE9\n    border: 1px solid $carousel-indicator-border-color;\n    border-radius: $carousel-indicator-size;\n  }\n\n  .active {\n    width: $carousel-indicator-active-size;\n    height: $carousel-indicator-active-size;\n    margin: 0;\n    background-color: $carousel-indicator-active-bg;\n  }\n}\n\n\n// Optional captions\n//\n// Hidden by default for smaller viewports.\n\n.carousel-caption {\n  position: absolute;\n  right: ((100% - $carousel-caption-width) / 2);\n  bottom: 20px;\n  left: ((100% - $carousel-caption-width) / 2);\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: $carousel-caption-color;\n  text-align: center;\n  text-shadow: $carousel-text-shadow;\n\n  .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n//\n// Responsive variations\n//\n\n@include media-breakpoint-up(sm) {\n  // Scale up the controls a smidge\n  .carousel-control {\n    .icon-prev,\n    .icon-next {\n      width: $carousel-control-sm-up-size;\n      height: $carousel-control-sm-up-size;\n      margin-top: -($carousel-control-sm-up-size / 2);\n      font-size: $carousel-control-sm-up-size;\n    }\n    .icon-prev {\n      margin-left: -($carousel-control-sm-up-size / 2);\n    }\n    .icon-next {\n      margin-right: -($carousel-control-sm-up-size / 2);\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    right: ((100% - $carousel-caption-sm-up-width) / 2);\n    left: ((100% - $carousel-caption-sm-up-width) / 2);\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n",".align-baseline { vertical-align: baseline !important; } // Browser default\n.align-top { vertical-align: top !important; }\n.align-middle { vertical-align: middle !important; }\n.align-bottom { vertical-align: bottom !important; }\n.align-text-bottom { vertical-align: text-bottom !important; }\n.align-text-top { vertical-align: text-top !important; }\n","//\n// Contextual backgrounds\n//\n\n.bg-faded {\n  background-color: $gray-lightest;\n}\n\n@include bg-variant('.bg-primary', $brand-primary);\n\n@include bg-variant('.bg-success', $brand-success);\n\n@include bg-variant('.bg-info', $brand-info);\n\n@include bg-variant('.bg-warning', $brand-warning);\n\n@include bg-variant('.bg-danger', $brand-danger);\n\n@include bg-variant('.bg-inverse', $brand-inverse);\n","// Contextual backgrounds\n\n@mixin bg-variant($parent, $color) {\n  #{$parent} {\n    background-color: $color !important;\n  }\n  a#{$parent} {\n    @include hover-focus {\n      background-color: darken($color, 10%) !important;\n    }\n  }\n}\n","//\n// Border-width\n//\n\n// TBD...?\n\n\n//\n// Border-radius\n//\n\n.rounded {\n  @include border-radius($border-radius);\n}\n.rounded-top {\n  @include border-top-radius($border-radius);\n}\n.rounded-right {\n  @include border-right-radius($border-radius);\n}\n.rounded-bottom {\n  @include border-bottom-radius($border-radius);\n}\n.rounded-left {\n  @include border-left-radius($border-radius);\n}\n\n.rounded-circle {\n  border-radius: 50%;\n}\n","//\n// Display utilities\n//\n\n.d-block {\n  display: block !important;\n}\n.d-inline-block {\n  display: inline-block !important;\n}\n.d-inline {\n  display: inline !important;\n}\n","@each $breakpoint in map-keys($grid-breakpoints) {\n  @include media-breakpoint-up($breakpoint) {\n    .float-#{$breakpoint}-left {\n      @include float-left();\n    }\n    .float-#{$breakpoint}-right {\n      @include float-right();\n    }\n    .float-#{$breakpoint}-none {\n      float: none !important;\n    }\n  }\n}\n","@mixin float-left {\n  float: left !important;\n}\n@mixin float-right {\n  float: right !important;\n}\n","//\n// Screenreaders\n//\n\n.sr-only {\n  @include sr-only();\n}\n\n.sr-only-focusable {\n  @include sr-only-focusable();\n}\n","// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content\n\n@mixin sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n","// Width and height\n\n.w-100 { width: 100% !important; }\n.h-100 { height: 100% !important; }\n\n// Margin and Padding\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left:  auto !important;\n}\n\n@each $prop, $abbrev in (margin: m, padding: p) {\n  @each $size, $lengths in $spacers {\n    $length-x:   map-get($lengths, x);\n    $length-y:   map-get($lengths, y);\n\n    .#{$abbrev}-#{$size} { #{$prop}:        $length-y $length-x !important; } // a = All sides\n    .#{$abbrev}t-#{$size} { #{$prop}-top:    $length-y !important; }\n    .#{$abbrev}r-#{$size} { #{$prop}-right:  $length-x !important; }\n    .#{$abbrev}b-#{$size} { #{$prop}-bottom: $length-y !important; }\n    .#{$abbrev}l-#{$size} { #{$prop}-left:   $length-x !important; }\n\n    // Axes\n    .#{$abbrev}x-#{$size} {\n      #{$prop}-right:  $length-x !important;\n      #{$prop}-left:   $length-x !important;\n    }\n    .#{$abbrev}y-#{$size} {\n      #{$prop}-top:    $length-y !important;\n      #{$prop}-bottom: $length-y !important;\n    }\n  }\n}\n\n// Positioning\n\n.pos-f-t {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: $zindex-navbar-fixed;\n}\n","//\n// Text\n//\n\n// Alignment\n\n.text-justify        { text-align: justify !important; }\n.text-nowrap         { white-space: nowrap !important; }\n.text-truncate       { @include text-truncate; }\n\n// Responsive alignment\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n  @include media-breakpoint-up($breakpoint) {\n    .text-#{$breakpoint}-left   { text-align: left !important; }\n    .text-#{$breakpoint}-right  { text-align: right !important; }\n    .text-#{$breakpoint}-center { text-align: center !important; }\n  }\n}\n\n// Transformation\n\n.text-lowercase      { text-transform: lowercase !important; }\n.text-uppercase      { text-transform: uppercase !important; }\n.text-capitalize     { text-transform: capitalize !important; }\n\n// Weight and italics\n\n.font-weight-normal  { font-weight: normal; }\n.font-weight-bold    { font-weight: bold; }\n.font-italic         { font-style: italic; }\n\n// Contextual colors\n\n.text-white {\n  color: #fff !important;\n}\n\n@include text-emphasis-variant('.text-muted', $text-muted);\n\n@include text-emphasis-variant('.text-primary', $brand-primary);\n\n@include text-emphasis-variant('.text-success', $brand-success);\n\n@include text-emphasis-variant('.text-info', $brand-info);\n\n@include text-emphasis-variant('.text-warning', $brand-warning);\n\n@include text-emphasis-variant('.text-danger', $brand-danger);\n\n// Font color\n\n@include text-emphasis-variant('.text-gray-dark', $gray-dark);\n\n// Misc\n\n.text-hide {\n  @include text-hide();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}","// Typography\n\n@mixin text-emphasis-variant($parent, $color) {\n  #{$parent} {\n    color: $color !important;\n  }\n  a#{$parent} {\n    @include hover-focus {\n      color: darken($color, 10%) !important;\n    }\n  }\n}\n","// CSS image replacement\n@mixin text-hide() {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n","//\n// Visibility utilities\n//\n\n.invisible {\n  visibility: hidden !important;\n}\n\n// Responsive visibility utilities\n\n@each $bp in map-keys($grid-breakpoints) {\n  .hidden-#{$bp}-up {\n    @include media-breakpoint-up($bp) {\n      display: none !important;\n    }\n  }\n  .hidden-#{$bp}-down {\n    @include media-breakpoint-down($bp) {\n      display: none !important;\n    }\n  }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n.visible-print-block {\n  display: none !important;\n\n  @media print {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n\n  @media print {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n\n  @media print {\n    display: inline-block !important;\n  }\n}\n\n.hidden-print {\n  @media print {\n    display: none !important;\n  }\n}\n","// http://v4-alpha.getbootstrap.com/getting-started/flexbox/#how-it-works\n// $enable-flex: true;\n\n$nav-pills-border-radius: 0;\n$nav-pills-active-link-color: white;\n$nav-pills-active-link-bg: #366e98;\n$brand-primary: #366e98;\n$brand-secondary: #047f75;\n$brand-success: #089944;\n$brand-danger: #990822;\n$brand-warning: #eca649;\n$brand-info: #044b7f;\n\n@import '../../../node_modules/bootstrap/scss/bootstrap';\n\n// imported from https://github.com/twbs/bootstrap/blob/d64466a2488bbaac9a1005db3a199a8bc6846e3e/scss/_variables.scss#L420\n.text-monospace {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;\n}\n\n// -------------------------------------------------------------------\n\n$fa-font-path: '.';\n\n@import '../../../node_modules/font-awesome/scss/font-awesome';\n\n// Replace Bootstrap's glyphicons by Font Awesome.\n.glyphicon {\n  @extend .fa;\n}\n\n// -------------------------------------------------------------------\n\n@import '../../../node_modules/font-mfizz/dist/font-mfizz';\n\n// -------------------------------------------------------------------\n\n@import './chartist';\n@import './meter';\n@import './icons';\n@import './usage';\n\n// ROOT STYLES =================================================================\n\n$side-menu-bg: #044b7f;\n$side-menu-color: white;\n\n@include media-breakpoint-down(md) {\n  html {\n    font-size: 1.5vw;\n  }\n}\n\n@include media-breakpoint-down(sm) {\n  html {\n    font-size: 3vmin;\n  }\n}\n\n@include media-breakpoint-down(xs) {\n  html {\n    font-size: 2.95vmin;\n  }\n}\n\n// REACT-VIRTUALIZED ===========================================================\n\n@import '../../../node_modules/react-virtualized/styles';\n\n// REACT-SELECT ================================================================\n\n$select-input-height: 40px; // Bootstrap input height\n@import '../../../node_modules/react-select/scss/default';\n\n// Bootstrap hack...\n.is-searchable {\n  width: 100%;\n}\n\n.Select-value-label {\n  color: #373a3c;\n}\n\n.Select-control {\n  border-radius: unset;\n}\n\n// Disabled option style.\n.Select-menu-outer .Select-option.is-disabled {\n  cursor: default;\n  font-weight: bold;\n  color: #777;\n}\n\n.Select-placeholder {\n  color: #999;\n}\n\n.Select--single > .Select-control .Select-value {\n  color: #333;\n}\n\n.d-inline-flex {\n  display: inline-flex;\n}\n\n.d-flex {\n  display: flex;\n}\n\n.align-self-center {\n  align-self: center;\n}\n\n.justify-content-end {\n  justify-content: flex-end;\n}\n\n// COLORS ======================================================================\n\n.xo-status-running {\n  @extend .text-success;\n}\n\n.xo-status-halted {\n  @extend .text-danger;\n}\n\n.xo-status-suspended {\n  @extend .text-info;\n}\n\n.xo-status-unknown,\n.xo-status-paused,\n.xo-status-disabled {\n  @extend .text-muted;\n}\n\n.xo-status-busy {\n  @extend .text-warning;\n}\n\n// HEADER CONTENT STYLE=========================================================\n\n.header-title {\n  margin-bottom: 1em;\n}\n\n.nav-tabs {\n  font-size: 1.2em;\n}\n\n// CONTENT TAB STYLE ===========================================================\n\n.btn-huge {\n  font-size: 4em;\n}\n\n.console {\n  margin-top: 1em;\n  text-align: center;\n}\n\n// GENERAL STYLES ==============================================================\n\n.tag-ip {\n  margin-left: 1em;\n}\n\n// MENU STYLE ==================================================================\n\n.xo-menu,\n.xo-sub-menu {\n  background: $side-menu-bg;\n  color: $side-menu-color;\n}\n\n.xo-menu {\n  a {\n    color: inherit;\n  }\n\n  button {\n    background-color: inherit;\n    color: inherit;\n  }\n}\n\n.xo-menu-item {\n  min-width: 100%;\n  position: relative;\n  width: max-content;\n\n  &:hover {\n    background-color: $nav-pills-active-link-bg;\n    color: $nav-pills-active-link-color;\n  }\n}\n\n.xo-sub-menu {\n  left: 100%;\n  opacity: 0;\n  position: absolute;\n  top: 0;\n  transition: opacity 0.3s;\n  visibility: hidden;\n  width: max-content;\n  z-index: 1000;\n}\n\n.xo-menu-item:hover > .xo-sub-menu {\n  opacity: 1;\n  visibility: visible;\n}\n// PAGE HEADER STYLE ===========================================================\n\n.page-header {\n  background: $gray-lighter;\n}\n\n// NOTIFICATIONS STYLE =========================================================\n\n.notify-container {\n  align-content: flex-start;\n  align-items: flex-start;\n  display: flex;\n  flex-direction: column;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  position: absolute;\n  right: 10px;\n  top: 10px;\n}\n\n.notify-item {\n  border-radius: 5px;\n  border: 1px solid black;\n  margin: 5px 10px;\n  width: 250px;\n  // Workaround to prevent some bootstrap elements from hiding the notifications.\n  // In bootstrap, \".input-group .form-control\" and \".input-group > .input-group-btn > .btn\"\n  // have \"z-index: 2\" and \"z-index: 3\" if they are hovered, focused or active.\n  // (https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.5/scss/_input-group.scss#L18-L37)\n  // (https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.5/scss/_input-group.scss#L177-L187)\n  z-index: 3;\n  &.success {\n    background: $alert-success-bg;\n    border-color: $alert-success-border;\n    color: $alert-success-text;\n  }\n  &.info {\n    background: $alert-info-bg;\n    border-color: $alert-info-border;\n    color: $alert-info-text;\n  }\n  &.error {\n    background: $alert-danger-bg;\n    border-color: $alert-danger-border;\n    color: $alert-danger-text;\n  }\n}\n\n.notify-item > p {\n  margin: 10px;\n}\n\n.notify-title {\n  font-weight: 700;\n}\n\n// =============================================================================\n\n.no-text-selection {\n  cursor: not-allowed;\n  -moz-user-select: none; /* Firefox */\n  user-select: none; /* Chrome */\n}\n\n.message-expandable {\n  cursor: pointer;\n\n  span {\n    text-decoration: underline;\n  }\n}\n\n.task-info,\n.task-warning {\n  padding: 2px 10px;\n  margin: 10px 0;\n  list-style-type: none;\n  border-radius: 10px;\n  border: 1px dashed #eca649;\n\n  li {\n    margin-bottom: 10px;\n\n    &:last-child {\n      margin-bottom: 0;\n    }\n\n    strong {\n      display: block;\n      color: #eca649;\n    }\n\n    span {\n      color: grey;\n    }\n  }\n}\n","// Spinning Icons\n// --------------------------\n\n.#{$fa-css-prefix}-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear;\n}\n\n.#{$fa-css-prefix}-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n","/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');\n  src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),\n    url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),\n    url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),\n    url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),\n    url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');\n//  src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts\n  font-weight: normal;\n  font-style: normal;\n}\n","// Base Class Definition\n// -------------------------\n\n.#{$fa-css-prefix} {\n  display: inline-block;\n  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n","// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.#{$fa-css-prefix}-lg {\n  font-size: (4em / 3);\n  line-height: (3em / 4);\n  vertical-align: -15%;\n}\n.#{$fa-css-prefix}-2x { font-size: 2em; }\n.#{$fa-css-prefix}-3x { font-size: 3em; }\n.#{$fa-css-prefix}-4x { font-size: 4em; }\n.#{$fa-css-prefix}-5x { font-size: 5em; }\n","// Fixed Width Icons\n// -------------------------\n.#{$fa-css-prefix}-fw {\n  width: (18em / 14);\n  text-align: center;\n}\n","// List Icons\n// -------------------------\n\n.#{$fa-css-prefix}-ul {\n  padding-left: 0;\n  margin-left: $fa-li-width;\n  list-style-type: none;\n  > li { position: relative; }\n}\n.#{$fa-css-prefix}-li {\n  position: absolute;\n  left: -$fa-li-width;\n  width: $fa-li-width;\n  top: (2em / 14);\n  text-align: center;\n  &.#{$fa-css-prefix}-lg {\n    left: -$fa-li-width + (4em / 14);\n  }\n}\n","// Bordered & Pulled\n// -------------------------\n\n.#{$fa-css-prefix}-border {\n  padding: .2em .25em .15em;\n  border: solid .08em $fa-border-color;\n  border-radius: .1em;\n}\n\n.#{$fa-css-prefix}-pull-left { float: left; }\n.#{$fa-css-prefix}-pull-right { float: right; }\n\n.#{$fa-css-prefix} {\n  &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }\n  &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }\n}\n\n/* Deprecated as of 4.4.0 */\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n.#{$fa-css-prefix} {\n  &.pull-left { margin-right: .3em; }\n  &.pull-right { margin-left: .3em; }\n}\n","// Rotated & Flipped Icons\n// -------------------------\n\n.#{$fa-css-prefix}-rotate-90  { @include fa-icon-rotate(90deg, 1);  }\n.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }\n.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }\n\n.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }\n.#{$fa-css-prefix}-flip-vertical   { @include fa-icon-flip(1, -1, 2); }\n\n// Hook for IE8-9\n// -------------------------\n\n:root .#{$fa-css-prefix}-rotate-90,\n:root .#{$fa-css-prefix}-rotate-180,\n:root .#{$fa-css-prefix}-rotate-270,\n:root .#{$fa-css-prefix}-flip-horizontal,\n:root .#{$fa-css-prefix}-flip-vertical {\n  filter: none;\n}\n","// Mixins\n// --------------------------\n\n@mixin fa-icon() {\n  display: inline-block;\n  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n\n@mixin fa-icon-rotate($degrees, $rotation) {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})\";\n  -webkit-transform: rotate($degrees);\n      -ms-transform: rotate($degrees);\n          transform: rotate($degrees);\n}\n\n@mixin fa-icon-flip($horiz, $vert, $rotation) {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)\";\n  -webkit-transform: scale($horiz, $vert);\n      -ms-transform: scale($horiz, $vert);\n          transform: scale($horiz, $vert);\n}\n\n\n// Only display content to screen readers. A la Bootstrap 4.\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n@mixin sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n","// Stacked Icons\n// -------------------------\n\n.#{$fa-css-prefix}-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.#{$fa-css-prefix}-stack-1x { line-height: inherit; }\n.#{$fa-css-prefix}-stack-2x { font-size: 2em; }\n.#{$fa-css-prefix}-inverse { color: $fa-inverse; }\n","/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n\n.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }\n.#{$fa-css-prefix}-music:before { content: $fa-var-music; }\n.#{$fa-css-prefix}-search:before { content: $fa-var-search; }\n.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }\n.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }\n.#{$fa-css-prefix}-star:before { content: $fa-var-star; }\n.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }\n.#{$fa-css-prefix}-user:before { content: $fa-var-user; }\n.#{$fa-css-prefix}-film:before { content: $fa-var-film; }\n.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }\n.#{$fa-css-prefix}-th:before { content: $fa-var-th; }\n.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }\n.#{$fa-css-prefix}-check:before { content: $fa-var-check; }\n.#{$fa-css-prefix}-remove:before,\n.#{$fa-css-prefix}-close:before,\n.#{$fa-css-prefix}-times:before { content: $fa-var-times; }\n.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }\n.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }\n.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }\n.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }\n.#{$fa-css-prefix}-gear:before,\n.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }\n.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }\n.#{$fa-css-prefix}-home:before { content: $fa-var-home; }\n.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }\n.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }\n.#{$fa-css-prefix}-road:before { content: $fa-var-road; }\n.#{$fa-css-prefix}-download:before { content: $fa-var-download; }\n.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }\n.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }\n.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }\n.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }\n.#{$fa-css-prefix}-rotate-right:before,\n.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }\n.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }\n.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }\n.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }\n.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }\n.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }\n.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }\n.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }\n.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }\n.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }\n.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }\n.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }\n.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }\n.#{$fa-css-prefix}-book:before { content: $fa-var-book; }\n.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }\n.#{$fa-css-prefix}-print:before { content: $fa-var-print; }\n.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }\n.#{$fa-css-prefix}-font:before { content: $fa-var-font; }\n.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }\n.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }\n.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }\n.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }\n.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }\n.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }\n.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }\n.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }\n.#{$fa-css-prefix}-list:before { content: $fa-var-list; }\n.#{$fa-css-prefix}-dedent:before,\n.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }\n.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }\n.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }\n.#{$fa-css-prefix}-photo:before,\n.#{$fa-css-prefix}-image:before,\n.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }\n.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }\n.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }\n.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }\n.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }\n.#{$fa-css-prefix}-edit:before,\n.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }\n.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }\n.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }\n.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }\n.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }\n.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }\n.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }\n.#{$fa-css-prefix}-play:before { content: $fa-var-play; }\n.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }\n.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }\n.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }\n.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }\n.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }\n.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }\n.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }\n.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }\n.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }\n.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }\n.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }\n.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }\n.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }\n.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }\n.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }\n.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }\n.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }\n.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }\n.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }\n.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }\n.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }\n.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }\n.#{$fa-css-prefix}-mail-forward:before,\n.#{$fa-css-prefix}-share:before { content: $fa-var-share; }\n.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }\n.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }\n.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }\n.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }\n.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }\n.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }\n.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }\n.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }\n.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }\n.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }\n.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }\n.#{$fa-css-prefix}-warning:before,\n.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }\n.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }\n.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }\n.#{$fa-css-prefix}-random:before { content: $fa-var-random; }\n.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }\n.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }\n.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }\n.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }\n.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }\n.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }\n.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }\n.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }\n.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }\n.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }\n.#{$fa-css-prefix}-bar-chart-o:before,\n.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }\n.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }\n.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }\n.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }\n.#{$fa-css-prefix}-key:before { content: $fa-var-key; }\n.#{$fa-css-prefix}-gears:before,\n.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }\n.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }\n.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }\n.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }\n.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }\n.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }\n.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }\n.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }\n.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }\n.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }\n.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }\n.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }\n.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }\n.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }\n.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }\n.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }\n.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }\n.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }\n.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }\n.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }\n.#{$fa-css-prefix}-facebook-f:before,\n.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }\n.#{$fa-css-prefix}-github:before { content: $fa-var-github; }\n.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }\n.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }\n.#{$fa-css-prefix}-feed:before,\n.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }\n.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }\n.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }\n.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }\n.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }\n.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }\n.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }\n.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }\n.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }\n.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }\n.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }\n.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }\n.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }\n.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }\n.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }\n.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }\n.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }\n.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }\n.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }\n.#{$fa-css-prefix}-group:before,\n.#{$fa-css-prefix}-users:before { content: $fa-var-users; }\n.#{$fa-css-prefix}-chain:before,\n.#{$fa-css-prefix}-link:before { content: $fa-var-link; }\n.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }\n.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }\n.#{$fa-css-prefix}-cut:before,\n.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }\n.#{$fa-css-prefix}-copy:before,\n.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }\n.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }\n.#{$fa-css-prefix}-save:before,\n.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }\n.#{$fa-css-prefix}-square:before { content: $fa-var-square; }\n.#{$fa-css-prefix}-navicon:before,\n.#{$fa-css-prefix}-reorder:before,\n.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }\n.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }\n.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }\n.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }\n.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }\n.#{$fa-css-prefix}-table:before { content: $fa-var-table; }\n.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }\n.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }\n.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }\n.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }\n.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }\n.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }\n.#{$fa-css-prefix}-money:before { content: $fa-var-money; }\n.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }\n.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }\n.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }\n.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }\n.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }\n.#{$fa-css-prefix}-unsorted:before,\n.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }\n.#{$fa-css-prefix}-sort-down:before,\n.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }\n.#{$fa-css-prefix}-sort-up:before,\n.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }\n.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }\n.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }\n.#{$fa-css-prefix}-rotate-left:before,\n.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }\n.#{$fa-css-prefix}-legal:before,\n.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }\n.#{$fa-css-prefix}-dashboard:before,\n.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }\n.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }\n.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }\n.#{$fa-css-prefix}-flash:before,\n.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }\n.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }\n.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }\n.#{$fa-css-prefix}-paste:before,\n.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }\n.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }\n.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }\n.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }\n.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }\n.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }\n.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }\n.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }\n.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }\n.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }\n.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }\n.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }\n.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }\n.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }\n.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }\n.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }\n.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }\n.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }\n.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }\n.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }\n.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }\n.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }\n.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }\n.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }\n.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }\n.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }\n.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }\n.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }\n.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }\n.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }\n.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }\n.#{$fa-css-prefix}-mobile-phone:before,\n.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }\n.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }\n.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }\n.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }\n.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }\n.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }\n.#{$fa-css-prefix}-mail-reply:before,\n.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }\n.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }\n.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }\n.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }\n.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }\n.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }\n.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }\n.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }\n.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }\n.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }\n.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }\n.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }\n.#{$fa-css-prefix}-code:before { content: $fa-var-code; }\n.#{$fa-css-prefix}-mail-reply-all:before,\n.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }\n.#{$fa-css-prefix}-star-half-empty:before,\n.#{$fa-css-prefix}-star-half-full:before,\n.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }\n.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }\n.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }\n.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }\n.#{$fa-css-prefix}-unlink:before,\n.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }\n.#{$fa-css-prefix}-question:before { content: $fa-var-question; }\n.#{$fa-css-prefix}-info:before { content: $fa-var-info; }\n.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }\n.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }\n.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }\n.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }\n.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }\n.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }\n.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }\n.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }\n.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }\n.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }\n.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }\n.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }\n.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }\n.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }\n.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }\n.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }\n.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }\n.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }\n.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }\n.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }\n.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }\n.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }\n.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }\n.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }\n.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }\n.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }\n.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }\n.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }\n.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }\n.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }\n.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }\n.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }\n.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }\n.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }\n.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }\n.#{$fa-css-prefix}-toggle-down:before,\n.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }\n.#{$fa-css-prefix}-toggle-up:before,\n.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }\n.#{$fa-css-prefix}-toggle-right:before,\n.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }\n.#{$fa-css-prefix}-euro:before,\n.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }\n.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }\n.#{$fa-css-prefix}-dollar:before,\n.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }\n.#{$fa-css-prefix}-rupee:before,\n.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }\n.#{$fa-css-prefix}-cny:before,\n.#{$fa-css-prefix}-rmb:before,\n.#{$fa-css-prefix}-yen:before,\n.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }\n.#{$fa-css-prefix}-ruble:before,\n.#{$fa-css-prefix}-rouble:before,\n.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }\n.#{$fa-css-prefix}-won:before,\n.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }\n.#{$fa-css-prefix}-bitcoin:before,\n.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }\n.#{$fa-css-prefix}-file:before { content: $fa-var-file; }\n.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }\n.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }\n.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }\n.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }\n.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }\n.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }\n.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }\n.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }\n.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }\n.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }\n.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }\n.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }\n.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }\n.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }\n.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }\n.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }\n.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }\n.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }\n.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }\n.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }\n.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }\n.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }\n.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }\n.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }\n.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }\n.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }\n.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }\n.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }\n.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }\n.#{$fa-css-prefix}-android:before { content: $fa-var-android; }\n.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }\n.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }\n.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }\n.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }\n.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }\n.#{$fa-css-prefix}-female:before { content: $fa-var-female; }\n.#{$fa-css-prefix}-male:before { content: $fa-var-male; }\n.#{$fa-css-prefix}-gittip:before,\n.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }\n.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }\n.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }\n.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }\n.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }\n.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }\n.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }\n.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }\n.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }\n.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }\n.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }\n.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }\n.#{$fa-css-prefix}-toggle-left:before,\n.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }\n.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }\n.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }\n.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }\n.#{$fa-css-prefix}-turkish-lira:before,\n.#{$fa-css-prefix}-try:before { content: $fa-var-try; }\n.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }\n.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }\n.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }\n.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }\n.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }\n.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }\n.#{$fa-css-prefix}-institution:before,\n.#{$fa-css-prefix}-bank:before,\n.#{$fa-css-prefix}-university:before { content: $fa-var-university; }\n.#{$fa-css-prefix}-mortar-board:before,\n.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }\n.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }\n.#{$fa-css-prefix}-google:before { content: $fa-var-google; }\n.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }\n.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }\n.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }\n.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }\n.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }\n.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }\n.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; }\n.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }\n.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }\n.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }\n.#{$fa-css-prefix}-language:before { content: $fa-var-language; }\n.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }\n.#{$fa-css-prefix}-building:before { content: $fa-var-building; }\n.#{$fa-css-prefix}-child:before { content: $fa-var-child; }\n.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }\n.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }\n.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }\n.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }\n.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }\n.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }\n.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }\n.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }\n.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }\n.#{$fa-css-prefix}-automobile:before,\n.#{$fa-css-prefix}-car:before { content: $fa-var-car; }\n.#{$fa-css-prefix}-cab:before,\n.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }\n.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }\n.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }\n.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }\n.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }\n.#{$fa-css-prefix}-database:before { content: $fa-var-database; }\n.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }\n.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }\n.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }\n.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }\n.#{$fa-css-prefix}-file-photo-o:before,\n.#{$fa-css-prefix}-file-picture-o:before,\n.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }\n.#{$fa-css-prefix}-file-zip-o:before,\n.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }\n.#{$fa-css-prefix}-file-sound-o:before,\n.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }\n.#{$fa-css-prefix}-file-movie-o:before,\n.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }\n.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }\n.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }\n.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }\n.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }\n.#{$fa-css-prefix}-life-bouy:before,\n.#{$fa-css-prefix}-life-buoy:before,\n.#{$fa-css-prefix}-life-saver:before,\n.#{$fa-css-prefix}-support:before,\n.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }\n.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }\n.#{$fa-css-prefix}-ra:before,\n.#{$fa-css-prefix}-resistance:before,\n.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }\n.#{$fa-css-prefix}-ge:before,\n.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }\n.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }\n.#{$fa-css-prefix}-git:before { content: $fa-var-git; }\n.#{$fa-css-prefix}-y-combinator-square:before,\n.#{$fa-css-prefix}-yc-square:before,\n.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }\n.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }\n.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }\n.#{$fa-css-prefix}-wechat:before,\n.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }\n.#{$fa-css-prefix}-send:before,\n.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }\n.#{$fa-css-prefix}-send-o:before,\n.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }\n.#{$fa-css-prefix}-history:before { content: $fa-var-history; }\n.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }\n.#{$fa-css-prefix}-header:before { content: $fa-var-header; }\n.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }\n.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }\n.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }\n.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }\n.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }\n.#{$fa-css-prefix}-soccer-ball-o:before,\n.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }\n.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }\n.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }\n.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }\n.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }\n.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }\n.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }\n.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }\n.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }\n.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }\n.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }\n.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }\n.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }\n.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }\n.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }\n.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }\n.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }\n.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }\n.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }\n.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }\n.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }\n.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }\n.#{$fa-css-prefix}-at:before { content: $fa-var-at; }\n.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }\n.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }\n.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }\n.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }\n.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }\n.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }\n.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }\n.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }\n.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }\n.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }\n.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }\n.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }\n.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }\n.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }\n.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }\n.#{$fa-css-prefix}-shekel:before,\n.#{$fa-css-prefix}-sheqel:before,\n.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }\n.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }\n.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }\n.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }\n.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }\n.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }\n.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }\n.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }\n.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }\n.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }\n.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }\n.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }\n.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }\n.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }\n.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }\n.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }\n.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }\n.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }\n.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }\n.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }\n.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }\n.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }\n.#{$fa-css-prefix}-intersex:before,\n.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }\n.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }\n.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }\n.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }\n.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }\n.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }\n.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }\n.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }\n.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }\n.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }\n.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }\n.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }\n.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }\n.#{$fa-css-prefix}-server:before { content: $fa-var-server; }\n.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }\n.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }\n.#{$fa-css-prefix}-hotel:before,\n.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }\n.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }\n.#{$fa-css-prefix}-train:before { content: $fa-var-train; }\n.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }\n.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }\n.#{$fa-css-prefix}-yc:before,\n.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }\n.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }\n.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }\n.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }\n.#{$fa-css-prefix}-battery-4:before,\n.#{$fa-css-prefix}-battery:before,\n.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }\n.#{$fa-css-prefix}-battery-3:before,\n.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }\n.#{$fa-css-prefix}-battery-2:before,\n.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }\n.#{$fa-css-prefix}-battery-1:before,\n.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }\n.#{$fa-css-prefix}-battery-0:before,\n.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }\n.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }\n.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }\n.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }\n.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }\n.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }\n.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }\n.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }\n.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }\n.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }\n.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }\n.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }\n.#{$fa-css-prefix}-hourglass-1:before,\n.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }\n.#{$fa-css-prefix}-hourglass-2:before,\n.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }\n.#{$fa-css-prefix}-hourglass-3:before,\n.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }\n.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }\n.#{$fa-css-prefix}-hand-grab-o:before,\n.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }\n.#{$fa-css-prefix}-hand-stop-o:before,\n.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }\n.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }\n.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }\n.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }\n.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }\n.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }\n.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }\n.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }\n.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }\n.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }\n.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }\n.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }\n.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }\n.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }\n.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }\n.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }\n.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }\n.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }\n.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }\n.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }\n.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }\n.#{$fa-css-prefix}-tv:before,\n.#{$fa-css-prefix}-television:before { content: $fa-var-television; }\n.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }\n.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }\n.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }\n.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }\n.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }\n.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }\n.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }\n.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }\n.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }\n.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }\n.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }\n.#{$fa-css-prefix}-map:before { content: $fa-var-map; }\n.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }\n.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }\n.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }\n.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }\n.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }\n.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }\n.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }\n.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }\n.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }\n.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }\n.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }\n.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }\n.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }\n.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }\n.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }\n.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }\n.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }\n.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }\n.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }\n.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }\n.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }\n.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }\n.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }\n.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }\n.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }\n.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }\n.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; }\n.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; }\n.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; }\n.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; }\n.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; }\n.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; }\n.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; }\n.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; }\n.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; }\n.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; }\n.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; }\n.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; }\n.#{$fa-css-prefix}-asl-interpreting:before,\n.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; }\n.#{$fa-css-prefix}-deafness:before,\n.#{$fa-css-prefix}-hard-of-hearing:before,\n.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; }\n.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; }\n.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; }\n.#{$fa-css-prefix}-signing:before,\n.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; }\n.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; }\n.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; }\n.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; }\n.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; }\n.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; }\n.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; }\n.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }\n.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; }\n.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; }\n.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; }\n.#{$fa-css-prefix}-google-plus-circle:before,\n.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }\n.#{$fa-css-prefix}-fa:before,\n.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }\n.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; }\n.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; }\n.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; }\n.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; }\n.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; }\n.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; }\n.#{$fa-css-prefix}-vcard:before,\n.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; }\n.#{$fa-css-prefix}-vcard-o:before,\n.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; }\n.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; }\n.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; }\n.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; }\n.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; }\n.#{$fa-css-prefix}-drivers-license:before,\n.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; }\n.#{$fa-css-prefix}-drivers-license-o:before,\n.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; }\n.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; }\n.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; }\n.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; }\n.#{$fa-css-prefix}-thermometer-4:before,\n.#{$fa-css-prefix}-thermometer:before,\n.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; }\n.#{$fa-css-prefix}-thermometer-3:before,\n.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; }\n.#{$fa-css-prefix}-thermometer-2:before,\n.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; }\n.#{$fa-css-prefix}-thermometer-1:before,\n.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; }\n.#{$fa-css-prefix}-thermometer-0:before,\n.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; }\n.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; }\n.#{$fa-css-prefix}-bathtub:before,\n.#{$fa-css-prefix}-s15:before,\n.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; }\n.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; }\n.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; }\n.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; }\n.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; }\n.#{$fa-css-prefix}-times-rectangle:before,\n.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; }\n.#{$fa-css-prefix}-times-rectangle-o:before,\n.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; }\n.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; }\n.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; }\n.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; }\n.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; }\n.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; }\n.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; }\n.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; }\n.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; }\n.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; }\n.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; }\n.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; }\n","// Screen Readers\n// -------------------------\n\n.sr-only { @include sr-only(); }\n.sr-only-focusable { @include sr-only-focusable(); }\n","//\n// Control\n// ------------------------------\n\n@import 'spinner';\n@import 'mixins';\n\n.Select {\n\tposition: relative;\n\n\t// disable some browser-specific behaviours that break the input\n\tinput::-webkit-contacts-auto-fill-button,\n\tinput::-webkit-credentials-auto-fill-button {\n\t\tdisplay: none !important;\n\t}\n\tinput::-ms-clear {\n\t\tdisplay: none !important;\n\t}\n\tinput::-ms-reveal {\n\t\tdisplay: none !important;\n\t}\n\n\t// preferred box model\n\t&,\n\t& div,\n\t& input,\n\t& span {\n\t\t@include box-sizing(border-box);\n\t}\n\n\t// handle disabled state\n\t&.is-disabled {\n\t\t.Select-arrow-zone {\n\t\t\tcursor: default;\n\t\t\tpointer-events: none;\n\t\t}\n\n\t\t> .Select-control {\n\t\t\tbackground-color: $select-input-bg-disabled;\n\t\t\t&:hover {\n\t\t\t\tbox-shadow: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.is-searchable {\n\t\t&.is-open > .Select-control {\n\t\t\tcursor: text;\n\t\t}\n\n\t\t&.is-focused:not(.is-open) > .Select-control {\n\t\t\tcursor: text;\n\t\t}\n\t}\n\n\t&.is-open > .Select-control {\n\t\t@include border-bottom-radius( 0 );\n\t\tbackground: $select-input-bg;\n\t\tborder-color: darken($select-input-border-color, 10%) $select-input-border-color lighten($select-input-border-color, 5%);\n\n\t\t// flip the arrow so its pointing up when the menu is open\n\t\t.Select-arrow {\n\t\t\ttop: -2px;\n\t\t\tborder-color: transparent transparent $select-arrow-color;\n\t\t\tborder-width: 0 $select-arrow-width $select-arrow-width;\n\t\t}\n\t}\n\n\t&.is-focused > .Select-control {\n\t\tbackground: $select-input-bg-focus;\n\t}\n\n\t&.is-focused:not(.is-open) > .Select-control {\n\t\tborder-color: $select-input-border-focus lighten($select-input-border-focus, 5%) lighten($select-input-border-focus, 5%);\n\t\tbox-shadow: $select-input-box-shadow-focus;\n\t}\n\n\n\t&.has-value.is-clearable.Select--single > .Select-control .Select-value {\n\t\tpadding-right: ($select-clear-width + $select-arrow-width * 5);\n\t}\n\n\t&.has-value.Select--single > .Select-control .Select-value,\n\t&.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value {\n\t\t.Select-value-label {\n\t\t\tcolor: $select-text-color;\n\t\t}\n\t\ta.Select-value-label {\n\t\t\tcursor: pointer;\n\t\t\ttext-decoration: none;\n\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tcolor: $select-link-hover-color;\n\t\t\t\toutline: none;\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\n\t\t\t&:focus {\n\t\t\t\tbackground: $select-input-bg-focus;\n\t\t\t}\n\t\t}\n\t}\n\n\t// fake-hide the input when the control is pseudo-focused\n\t&.has-value.is-pseudo-focused .Select-input {\n\t\topacity: 0;\n\t}\n\n\t&.is-open .Select-arrow,\n\t.Select-arrow-zone:hover > .Select-arrow {\n\t\tborder-top-color: $select-arrow-color-hover;\n\t}\n\t&.Select--rtl {\n\t\tdirection: rtl;\n\t\ttext-align: right;\n\t}\n}\n\n// base\n\n.Select-control {\n\tbackground-color: $select-input-bg;\n\tborder-color: lighten($select-input-border-color, 5%) $select-input-border-color darken($select-input-border-color, 10%);\n\tborder-radius: $select-input-border-radius;\n\tborder: $select-input-border-width solid $select-input-border-color;\n\tcolor: $select-text-color;\n\tcursor: default;\n\tdisplay: table;\n\tborder-spacing: 0;\n\tborder-collapse: separate;\n\theight: $select-input-height;\n\toutline: none;\n\toverflow: hidden;\n\tposition: relative;\n\twidth: 100%;\n\n\t&:hover {\n\t\tbox-shadow: $select-input-hover-box-shadow;\n\t}\n\n\t.Select-input:focus {\n\t\toutline: none;\n\t\tbackground: $select-input-bg-focus;\n\t}\n}\n\n// placeholder\n.Select-placeholder,\n.Select--single > .Select-control .Select-value {\n\tbottom: 0;\n\tcolor: $select-input-placeholder;\n\tleft: 0;\n\tline-height: $select-input-internal-height;\n\tpadding-left: $select-padding-horizontal;\n\tpadding-right: $select-padding-horizontal;\n\tposition: absolute;\n\tright: 0;\n\ttop: 0;\n\n\t// crop text\n\tmax-width: 100%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n\n// the <input> element users type in\n\n.Select-input {\n\t// inherits `display: inline-block` from \"react-input-autosize\"\n\theight: $select-input-internal-height;\n\tpadding-left: $select-padding-horizontal;\n\tpadding-right: $select-padding-horizontal;\n\tvertical-align: middle;\n\n\t> input {\n\t\twidth: 100%;\n\t\tbackground: none transparent;\n\t\tborder: 0 none;\n\t\tbox-shadow: none;\n\t\tcursor: default;\n\t\tdisplay: inline-block;\n\t\tfont-family: inherit;\n\t\tfont-size: inherit;\n\t\t// height: $select-input-internal-height;\n\t\tmargin: 0;\n\t\toutline: none;\n\t\t// padding: 0;\n\t\tline-height: 17px;  /* For IE 8 compatibility */\n\t\tpadding: (($select-input-internal-height - 14) / 2 - 2) 0 (($select-input-internal-height - 14) / 2 + 2);  /* For IE 8 compatibility */\n\t\t-webkit-appearance: none;\n\n\t\t.is-focused & {\n\t\t\tcursor: text;\n\t\t}\n\t}\n\n}\n\n// fake input\n.Select-control:not(.is-searchable) > .Select-input {\n\toutline: none;\n}\n\n// loading indicator\n.Select-loading-zone {\n\tcursor: pointer;\n\tdisplay: table-cell;\n\tposition: relative;\n\ttext-align: center;\n\tvertical-align: middle;\n\twidth: $select-loading-size;\n}\n.Select-loading {\n\t@include Select-spinner($select-loading-size, $select-loading-color-bg, $select-loading-color);\n\tvertical-align: middle;\n}\n\n\n// the little cross that clears the field\n\n.Select-clear-zone {\n\t@include animation( Select-animation-fadeIn 200ms );\n\tcolor: $select-clear-color;\n\tcursor: pointer;\n\tdisplay: table-cell;\n\tposition: relative;\n\ttext-align: center;\n\tvertical-align: middle;\n\twidth: $select-clear-width;\n\n\t&:hover {\n\t\tcolor: $select-clear-hover-color;\n\t}\n}\n.Select-clear {\n\tdisplay: inline-block;\n\tfont-size: $select-clear-size;\n\tline-height: 1;\n}\n.Select--multi .Select-clear-zone {\n\twidth: $select-clear-width;\n}\n\n.Select--multi .Select-multi-value-wrapper {\n  display: inline-block;\n}\n.Select .Select-aria-only {\n\tposition: absolute;\n\tdisplay: inline-block;\n\theight: 1px;\n\twidth: 1px;\n\tmargin: -1px;\n\tclip: rect(0,0,0,0);\n\toverflow: hidden;\n\tfloat: left;\n}\n\n\n// arrow indicator\n\n.Select-arrow-zone {\n\tcursor: pointer;\n\tdisplay: table-cell;\n\tposition: relative;\n\ttext-align: center;\n\tvertical-align: middle;\n\twidth: ($select-arrow-width * 5);\n\tpadding-right: $select-arrow-width;\n\n\t.Select--rtl & {\n\t\tpadding-right: 0;\n\t\tpadding-left: $select-arrow-width;\n\t}\n}\n\n.Select-arrow {\n\tborder-color: $select-arrow-color transparent transparent;\n\tborder-style: solid;\n\tborder-width: $select-arrow-width $select-arrow-width ($select-arrow-width / 2);\n\tdisplay: inline-block;\n\theight: 0;\n\twidth: 0;\n\tposition: relative;\n}\n\n\n\n\n// Animation\n// ------------------------------\n\n// fade in\n\n@-webkit-keyframes Select-animation-fadeIn {\n\tfrom { opacity: 0; }\n\tto { opacity: 1; }\n}\n@keyframes Select-animation-fadeIn {\n\tfrom { opacity: 0; }\n\tto { opacity: 1; }\n}\n","//\n// Spinner\n// ------------------------------\n@import 'mixins';\n\n@mixin Select-spinner($size, $orbit, $satellite)\n{\n\t@include animation( Select-animation-spin 400ms infinite linear );\n\t@include square($size);\n\tbox-sizing: border-box;\n\tborder-radius: 50%;\n\tborder: floor(($size / 8)) solid $orbit;\n\tborder-right-color: $satellite;\n\tdisplay: inline-block;\n\tposition: relative;\n\n}\n\n@keyframes Select-animation-spin {\n\tto { transform: rotate(1turn); }\n}\n@-webkit-keyframes Select-animation-spin {\n\tto { -webkit-transform: rotate(1turn); }\n}\n","/*!\n * Font Mfizz 2.4.1\n * Copyright 2013-2017 Fizzed, Inc.\n * MIT License\n *\n * Project: http://fizzed.com/oss/font-mfizz\n *\n * The font designed for technology and software geeks representing programming\n * languages, operating systems, software engineering, and technology.\n *\n * Fizzed, Inc.\n * Web: http://fizzed.com/\n * Twitter: http://twitter.com/fizzed_inc\n */\n\n@font-face {\n  font-family: \"FontMfizz\";\n  src: url(\"./font-mfizz.eot\");\n  src: url(\"./font-mfizz.eot?#iefix\") format(\"embedded-opentype\"),\n       url(\"./font-mfizz.woff\") format(\"woff\"),\n       url(\"./font-mfizz.ttf\") format(\"truetype\"),\n       url(\"./font-mfizz.svg#font-mfizz\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal;\n}\n\n@media screen and (-webkit-min-device-pixel-ratio:0) {\n  @font-face {\n    font-family: \"FontMfizz\";\n    src: url(\"./font-mfizz.svg#font-mfizz\") format(\"svg\");\n  }\n}\n\n[data-icon]:before { content: attr(data-icon); }\n\n[data-icon]:before,\n.icon-3dprint:before,\n.icon-alpinelinux:before,\n.icon-angular:before,\n.icon-angular-alt:before,\n.icon-antenna:before,\n.icon-apache:before,\n.icon-archlinux:before,\n.icon-aws:before,\n.icon-azure:before,\n.icon-backbone:before,\n.icon-blackberry:before,\n.icon-bomb:before,\n.icon-bootstrap:before,\n.icon-c:before,\n.icon-cassandra:before,\n.icon-centos:before,\n.icon-clojure:before,\n.icon-codeigniter:before,\n.icon-codepen:before,\n.icon-coffee-bean:before,\n.icon-cplusplus:before,\n.icon-csharp:before,\n.icon-css:before,\n.icon-css3:before,\n.icon-css3-alt:before,\n.icon-d3:before,\n.icon-database:before,\n.icon-database-alt:before,\n.icon-database-alt2:before,\n.icon-debian:before,\n.icon-docker:before,\n.icon-dreamhost:before,\n.icon-elixir:before,\n.icon-elm:before,\n.icon-erlang:before,\n.icon-exherbo:before,\n.icon-fedora:before,\n.icon-fire-alt:before,\n.icon-freebsd:before,\n.icon-freecodecamp:before,\n.icon-gentoo:before,\n.icon-ghost:before,\n.icon-git:before,\n.icon-gnome:before,\n.icon-go:before,\n.icon-go-alt:before,\n.icon-google:before,\n.icon-google-alt:before,\n.icon-google-code:before,\n.icon-google-developers:before,\n.icon-gradle:before,\n.icon-grails:before,\n.icon-grails-alt:before,\n.icon-grunt:before,\n.icon-gulp:before,\n.icon-gulp-alt:before,\n.icon-hadoop:before,\n.icon-haskell:before,\n.icon-heroku:before,\n.icon-html:before,\n.icon-html5:before,\n.icon-html5-alt:before,\n.icon-iphone:before,\n.icon-java:before,\n.icon-java-bold:before,\n.icon-java-duke:before,\n.icon-javascript:before,\n.icon-javascript-alt:before,\n.icon-jetty:before,\n.icon-jquery:before,\n.icon-kde:before,\n.icon-laravel:before,\n.icon-line-graph:before,\n.icon-linux-mint:before,\n.icon-looking:before,\n.icon-magento:before,\n.icon-mariadb:before,\n.icon-maven:before,\n.icon-microscope:before,\n.icon-mobile-device:before,\n.icon-mobile-phone-alt:before,\n.icon-mobile-phone-broadcast:before,\n.icon-mongodb:before,\n.icon-mssql:before,\n.icon-mysql:before,\n.icon-mysql-alt:before,\n.icon-netbsd:before,\n.icon-nginx:before,\n.icon-nginx-alt:before,\n.icon-nginx-alt2:before,\n.icon-nodejs:before,\n.icon-npm:before,\n.icon-objc:before,\n.icon-openshift:before,\n.icon-oracle:before,\n.icon-oracle-alt:before,\n.icon-osx:before,\n.icon-perl:before,\n.icon-phone-alt:before,\n.icon-phone-gap:before,\n.icon-phone-retro:before,\n.icon-php:before,\n.icon-php-alt:before,\n.icon-playframework:before,\n.icon-playframework-alt:before,\n.icon-plone:before,\n.icon-postgres:before,\n.icon-postgres-alt:before,\n.icon-python:before,\n.icon-raspberrypi:before,\n.icon-reactjs:before,\n.icon-redhat:before,\n.icon-redis:before,\n.icon-ruby:before,\n.icon-ruby-on-rails:before,\n.icon-ruby-on-rails-alt:before,\n.icon-rust:before,\n.icon-sass:before,\n.icon-satellite:before,\n.icon-scala:before,\n.icon-scala-alt:before,\n.icon-script:before,\n.icon-script-alt:before,\n.icon-shell:before,\n.icon-sitefinity:before,\n.icon-solaris:before,\n.icon-splatter:before,\n.icon-spring:before,\n.icon-suse:before,\n.icon-svg:before,\n.icon-symfony:before,\n.icon-tomcat:before,\n.icon-ubuntu:before,\n.icon-unity:before,\n.icon-wireless:before,\n.icon-wordpress:before,\n.icon-x11:before {\n  display: inline-block;\n  font-family: \"FontMfizz\";\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  line-height: 1;\n  text-decoration: inherit;\n  text-rendering: optimizeLegibility;\n  text-transform: none;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n}\n\n.icon-3dprint:before { content: \"\\f100\"; }\n.icon-alpinelinux:before { content: \"\\f101\"; }\n.icon-angular:before { content: \"\\f102\"; }\n.icon-angular-alt:before { content: \"\\f103\"; }\n.icon-antenna:before { content: \"\\f104\"; }\n.icon-apache:before { content: \"\\f105\"; }\n.icon-archlinux:before { content: \"\\f106\"; }\n.icon-aws:before { content: \"\\f107\"; }\n.icon-azure:before { content: \"\\f108\"; }\n.icon-backbone:before { content: \"\\f109\"; }\n.icon-blackberry:before { content: \"\\f10a\"; }\n.icon-bomb:before { content: \"\\f10b\"; }\n.icon-bootstrap:before { content: \"\\f10c\"; }\n.icon-c:before { content: \"\\f10d\"; }\n.icon-cassandra:before { content: \"\\f10e\"; }\n.icon-centos:before { content: \"\\f10f\"; }\n.icon-clojure:before { content: \"\\f110\"; }\n.icon-codeigniter:before { content: \"\\f111\"; }\n.icon-codepen:before { content: \"\\f112\"; }\n.icon-coffee-bean:before { content: \"\\f113\"; }\n.icon-cplusplus:before { content: \"\\f114\"; }\n.icon-csharp:before { content: \"\\f115\"; }\n.icon-css:before { content: \"\\f116\"; }\n.icon-css3:before { content: \"\\f117\"; }\n.icon-css3-alt:before { content: \"\\f118\"; }\n.icon-d3:before { content: \"\\f119\"; }\n.icon-database:before { content: \"\\f11a\"; }\n.icon-database-alt:before { content: \"\\f11b\"; }\n.icon-database-alt2:before { content: \"\\f11c\"; }\n.icon-debian:before { content: \"\\f11d\"; }\n.icon-docker:before { content: \"\\f11e\"; }\n.icon-dreamhost:before { content: \"\\f11f\"; }\n.icon-elixir:before { content: \"\\f120\"; }\n.icon-elm:before { content: \"\\f121\"; }\n.icon-erlang:before { content: \"\\f122\"; }\n.icon-exherbo:before { content: \"\\f123\"; }\n.icon-fedora:before { content: \"\\f124\"; }\n.icon-fire-alt:before { content: \"\\f125\"; }\n.icon-freebsd:before { content: \"\\f126\"; }\n.icon-freecodecamp:before { content: \"\\f127\"; }\n.icon-gentoo:before { content: \"\\f128\"; }\n.icon-ghost:before { content: \"\\f129\"; }\n.icon-git:before { content: \"\\f12a\"; }\n.icon-gnome:before { content: \"\\f12b\"; }\n.icon-go:before { content: \"\\f12c\"; }\n.icon-go-alt:before { content: \"\\f12d\"; }\n.icon-google:before { content: \"\\f12e\"; }\n.icon-google-alt:before { content: \"\\f12f\"; }\n.icon-google-code:before { content: \"\\f130\"; }\n.icon-google-developers:before { content: \"\\f131\"; }\n.icon-gradle:before { content: \"\\f132\"; }\n.icon-grails:before { content: \"\\f133\"; }\n.icon-grails-alt:before { content: \"\\f134\"; }\n.icon-grunt:before { content: \"\\f135\"; }\n.icon-gulp:before { content: \"\\f136\"; }\n.icon-gulp-alt:before { content: \"\\f137\"; }\n.icon-hadoop:before { content: \"\\f138\"; }\n.icon-haskell:before { content: \"\\f139\"; }\n.icon-heroku:before { content: \"\\f13a\"; }\n.icon-html:before { content: \"\\f13b\"; }\n.icon-html5:before { content: \"\\f13c\"; }\n.icon-html5-alt:before { content: \"\\f13d\"; }\n.icon-iphone:before { content: \"\\f13e\"; }\n.icon-java:before { content: \"\\f13f\"; }\n.icon-java-bold:before { content: \"\\f140\"; }\n.icon-java-duke:before { content: \"\\f141\"; }\n.icon-javascript:before { content: \"\\f142\"; }\n.icon-javascript-alt:before { content: \"\\f143\"; }\n.icon-jetty:before { content: \"\\f144\"; }\n.icon-jquery:before { content: \"\\f145\"; }\n.icon-kde:before { content: \"\\f146\"; }\n.icon-laravel:before { content: \"\\f147\"; }\n.icon-line-graph:before { content: \"\\f148\"; }\n.icon-linux-mint:before { content: \"\\f149\"; }\n.icon-looking:before { content: \"\\f14a\"; }\n.icon-magento:before { content: \"\\f14b\"; }\n.icon-mariadb:before { content: \"\\f14c\"; }\n.icon-maven:before { content: \"\\f14d\"; }\n.icon-microscope:before { content: \"\\f14e\"; }\n.icon-mobile-device:before { content: \"\\f14f\"; }\n.icon-mobile-phone-alt:before { content: \"\\f150\"; }\n.icon-mobile-phone-broadcast:before { content: \"\\f151\"; }\n.icon-mongodb:before { content: \"\\f152\"; }\n.icon-mssql:before { content: \"\\f153\"; }\n.icon-mysql:before { content: \"\\f154\"; }\n.icon-mysql-alt:before { content: \"\\f155\"; }\n.icon-netbsd:before { content: \"\\f156\"; }\n.icon-nginx:before { content: \"\\f157\"; }\n.icon-nginx-alt:before { content: \"\\f158\"; }\n.icon-nginx-alt2:before { content: \"\\f159\"; }\n.icon-nodejs:before { content: \"\\f15a\"; }\n.icon-npm:before { content: \"\\f15b\"; }\n.icon-objc:before { content: \"\\f15c\"; }\n.icon-openshift:before { content: \"\\f15d\"; }\n.icon-oracle:before { content: \"\\f15e\"; }\n.icon-oracle-alt:before { content: \"\\f15f\"; }\n.icon-osx:before { content: \"\\f160\"; }\n.icon-perl:before { content: \"\\f161\"; }\n.icon-phone-alt:before { content: \"\\f162\"; }\n.icon-phone-gap:before { content: \"\\f163\"; }\n.icon-phone-retro:before { content: \"\\f164\"; }\n.icon-php:before { content: \"\\f165\"; }\n.icon-php-alt:before { content: \"\\f166\"; }\n.icon-playframework:before { content: \"\\f167\"; }\n.icon-playframework-alt:before { content: \"\\f168\"; }\n.icon-plone:before { content: \"\\f169\"; }\n.icon-postgres:before { content: \"\\f16a\"; }\n.icon-postgres-alt:before { content: \"\\f16b\"; }\n.icon-python:before { content: \"\\f16c\"; }\n.icon-raspberrypi:before { content: \"\\f16d\"; }\n.icon-reactjs:before { content: \"\\f16e\"; }\n.icon-redhat:before { content: \"\\f16f\"; }\n.icon-redis:before { content: \"\\f170\"; }\n.icon-ruby:before { content: \"\\f171\"; }\n.icon-ruby-on-rails:before { content: \"\\f172\"; }\n.icon-ruby-on-rails-alt:before { content: \"\\f173\"; }\n.icon-rust:before { content: \"\\f174\"; }\n.icon-sass:before { content: \"\\f175\"; }\n.icon-satellite:before { content: \"\\f176\"; }\n.icon-scala:before { content: \"\\f177\"; }\n.icon-scala-alt:before { content: \"\\f178\"; }\n.icon-script:before { content: \"\\f179\"; }\n.icon-script-alt:before { content: \"\\f17a\"; }\n.icon-shell:before { content: \"\\f17b\"; }\n.icon-sitefinity:before { content: \"\\f17c\"; }\n.icon-solaris:before { content: \"\\f17d\"; }\n.icon-splatter:before { content: \"\\f17e\"; }\n.icon-spring:before { content: \"\\f17f\"; }\n.icon-suse:before { content: \"\\f180\"; }\n.icon-svg:before { content: \"\\f181\"; }\n.icon-symfony:before { content: \"\\f182\"; }\n.icon-tomcat:before { content: \"\\f183\"; }\n.icon-ubuntu:before { content: \"\\f184\"; }\n.icon-unity:before { content: \"\\f185\"; }\n.icon-wireless:before { content: \"\\f186\"; }\n.icon-wordpress:before { content: \"\\f187\"; }\n.icon-x11:before { content: \"\\f188\"; }\n","@import \"settings/chartist-settings\";\n\n@mixin ct-responsive-svg-container($width: 100%, $ratio: $ct-container-ratio) {\n  display: block;\n  position: relative;\n  width: $width;\n\n  &:before {\n    display: block;\n    float: left;\n    content: \"\";\n    width: 0;\n    height: 0;\n    padding-bottom: $ratio * 100%;\n  }\n\n  &:after {\n    content: \"\";\n    display: table;\n    clear: both;\n  }\n\n  > svg {\n    display: block;\n    position: absolute;\n    top: 0;\n    left: 0;\n  }\n}\n\n@mixin ct-align-justify($ct-text-align: $ct-text-align, $ct-text-justify: $ct-text-justify) {\n  -webkit-box-align: $ct-text-align;\n  -webkit-align-items: $ct-text-align;\n  -ms-flex-align: $ct-text-align;\n  align-items: $ct-text-align;\n  -webkit-box-pack: $ct-text-justify;\n  -webkit-justify-content: $ct-text-justify;\n  -ms-flex-pack: $ct-text-justify;\n  justify-content: $ct-text-justify;\n  // Fallback to text-align for non-flex browsers\n  @if($ct-text-justify == 'flex-start') {\n    text-align: left;\n  } @else if ($ct-text-justify == 'flex-end') {\n    text-align: right;\n  } @else {\n    text-align: center;\n  }\n}\n\n@mixin ct-flex() {\n  // Fallback to block\n  display: block;\n  display: -webkit-box;\n  display: -moz-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n}\n\n@mixin ct-chart-label($ct-text-color: $ct-text-color, $ct-text-size: $ct-text-size, $ct-text-line-height: $ct-text-line-height) {\n  fill: $ct-text-color;\n  color: $ct-text-color;\n  font-size: $ct-text-size;\n  line-height: $ct-text-line-height;\n}\n\n@mixin ct-chart-grid($ct-grid-color: $ct-grid-color, $ct-grid-width: $ct-grid-width, $ct-grid-dasharray: $ct-grid-dasharray) {\n  stroke: $ct-grid-color;\n  stroke-width: $ct-grid-width;\n\n  @if ($ct-grid-dasharray) {\n    stroke-dasharray: $ct-grid-dasharray;\n  }\n}\n\n@mixin ct-chart-point($ct-point-size: $ct-point-size, $ct-point-shape: $ct-point-shape) {\n  stroke-width: $ct-point-size;\n  stroke-linecap: $ct-point-shape;\n}\n\n@mixin ct-chart-line($ct-line-width: $ct-line-width, $ct-line-dasharray: $ct-line-dasharray) {\n  fill: none;\n  stroke-width: $ct-line-width;\n\n  @if ($ct-line-dasharray) {\n    stroke-dasharray: $ct-line-dasharray;\n  }\n}\n\n@mixin ct-chart-area($ct-area-opacity: $ct-area-opacity) {\n  stroke: none;\n  fill-opacity: $ct-area-opacity;\n}\n\n@mixin ct-chart-bar($ct-bar-width: $ct-bar-width) {\n  fill: none;\n  stroke-width: $ct-bar-width;\n}\n\n@mixin ct-chart-donut($ct-donut-width: $ct-donut-width) {\n  fill: none;\n  stroke-width: $ct-donut-width;\n}\n\n@mixin ct-chart-series-color($color) {\n  .#{$ct-class-point}, .#{$ct-class-line}, .#{$ct-class-bar}, .#{$ct-class-slice-donut} {\n    stroke: $color;\n  }\n\n  .#{$ct-class-slice-pie}, .#{$ct-class-area} {\n    fill: $color;\n  }\n}\n\n@mixin ct-chart($ct-container-ratio: $ct-container-ratio, $ct-text-color: $ct-text-color, $ct-text-size: $ct-text-size, $ct-grid-color: $ct-grid-color, $ct-grid-width: $ct-grid-width, $ct-grid-dasharray: $ct-grid-dasharray, $ct-point-size: $ct-point-size, $ct-point-shape: $ct-point-shape, $ct-line-width: $ct-line-width, $ct-bar-width: $ct-bar-width, $ct-donut-width: $ct-donut-width, $ct-series-names: $ct-series-names, $ct-series-colors: $ct-series-colors) {\n\n  .#{$ct-class-label} {\n    @include ct-chart-label($ct-text-color, $ct-text-size);\n  }\n\n  .#{$ct-class-chart-line} .#{$ct-class-label},\n  .#{$ct-class-chart-bar} .#{$ct-class-label} {\n    @include ct-flex();\n  }\n\n  .#{$ct-class-chart-pie} .#{$ct-class-label},\n  .#{$ct-class-chart-donut} .#{$ct-class-label} {\n    dominant-baseline: central;\n  }\n\n  .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-start} {\n    @include ct-align-justify(flex-end, flex-start);\n    // Fallback for browsers that don't support foreignObjects\n    text-anchor: start;\n  }\n\n  .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-end} {\n    @include ct-align-justify(flex-start, flex-start);\n    // Fallback for browsers that don't support foreignObjects\n    text-anchor: start;\n  }\n\n  .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-start} {\n    @include ct-align-justify(flex-end, flex-end);\n    // Fallback for browsers that don't support foreignObjects\n    text-anchor: end;\n  }\n\n  .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-end} {\n    @include ct-align-justify(flex-end, flex-start);\n    // Fallback for browsers that don't support foreignObjects\n    text-anchor: start;\n  }\n\n  .#{$ct-class-chart-bar} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-start} {\n    @include ct-align-justify(flex-end, center);\n    // Fallback for browsers that don't support foreignObjects\n    text-anchor: start;\n  }\n\n  .#{$ct-class-chart-bar} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-end} {\n    @include ct-align-justify(flex-start, center);\n    // Fallback for browsers that don't support foreignObjects\n    text-anchor: start;\n  }\n\n  .#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-start} {\n    @include ct-align-justify(flex-end, flex-start);\n    // Fallback for browsers that don't support foreignObjects\n    text-anchor: start;\n  }\n\n  .#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-end} {\n    @include ct-align-justify(flex-start, flex-start);\n    // Fallback for browsers that don't support foreignObjects\n    text-anchor: start;\n  }\n\n  .#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-start} {\n    //@include ct-chart-label($ct-text-color, $ct-text-size, center, $ct-vertical-text-justify);\n    @include ct-align-justify(center, flex-end);\n    // Fallback for browsers that don't support foreignObjects\n    text-anchor: end;\n  }\n\n  .#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-end} {\n    @include ct-align-justify(center, flex-start);\n    // Fallback for browsers that don't support foreignObjects\n    text-anchor: end;\n  }\n\n  .#{$ct-class-grid} {\n    @include ct-chart-grid($ct-grid-color, $ct-grid-width, $ct-grid-dasharray);\n  }\n\n  .#{$ct-class-grid-background} {\n    fill: $ct-grid-background-fill;\n  }\n\n  .#{$ct-class-point} {\n    @include ct-chart-point($ct-point-size, $ct-point-shape);\n  }\n\n  .#{$ct-class-line} {\n    @include ct-chart-line($ct-line-width);\n  }\n\n  .#{$ct-class-area} {\n    @include ct-chart-area();\n  }\n\n  .#{$ct-class-bar} {\n    @include ct-chart-bar($ct-bar-width);\n  }\n\n  .#{$ct-class-slice-donut} {\n    @include ct-chart-donut($ct-donut-width);\n  }\n\n  @if $ct-include-colored-series {\n    @for $i from 0 to length($ct-series-names) {\n      .#{$ct-class-series}-#{nth($ct-series-names, $i + 1)} {\n        $color: nth($ct-series-colors, $i + 1);\n\n        @include ct-chart-series-color($color);\n      }\n    }\n  }\n}\n\n@if $ct-include-classes {\n  @include ct-chart();\n\n  @if $ct-include-alternative-responsive-containers {\n    @for $i from 0 to length($ct-scales-names) {\n      .#{nth($ct-scales-names, $i + 1)} {\n        @include ct-responsive-svg-container($ratio: nth($ct-scales, $i + 1));\n      }\n    }\n  }\n}\n","// CHARTIST  ===================================================================\n\n$ct-series-colors: (\n  $brand-success,\n  $brand-primary,\n  #f17cb0,\n  #86797d,\n  #b276b2,\n  #f15854,\n  #b2912f,\n  #decf3f,\n  #dda458,\n  #60bd68,\n  #4d4d4d,\n  #eacf7d,\n  #b2c326,\n  #6188e2,\n  #a748ca\n) !default;\n\n@import '../../../node_modules/chartist/dist/scss/settings/_chartist-settings';\n@import '../../../node_modules/chartist/dist/scss/chartist';\n\n.ct-chart {\n  display: flex;\n  flex-direction: column-reverse;\n}\n\n// safari has a bug in flex computing that prevent charts from showing see #1755\n// by fixing the height with a value found in Chrome it seems like it fixes the issue without breaking the layout\n// elsewhere\n.dashboardItem .ct-chart {\n  height: 150px;\n}\n\n// Line in charts with only 2px in width\n.ct-line {\n  stroke-width: 2px;\n}\n\n.ct-bar {\n  stroke-width: 10%;\n}\n\n.ct-point {\n  stroke-width: 30px;\n  stroke-opacity: 0 !important;\n}\n\n.ct-point:hover {\n  stroke-opacity: 0.2 !important;\n  stroke-width: 20px;\n}\n\n.ct-tooltip {\n  position: absolute;\n  display: inline-block;\n  min-width: 5em;\n  padding: 8px 10px;\n  background: #383838;\n  color: #fff;\n  text-align: center;\n  pointer-events: none;\n  z-index: 10;\n  font-weight: 700;\n\n  // Arrow!\n  &:before {\n    bottom: -14px;\n    top: 100%;\n    left: 50%;\n    border: solid transparent;\n    content: '';\n    height: 0;\n    width: 0;\n    pointer-events: none;\n    border-color: rgba(251, 249, 228, 0);\n    border-top-color: #383838;\n    border-width: 7px;\n    margin-left: -8px;\n  }\n\n  &.hide {\n    display: block;\n    opacity: 0;\n    visibility: hidden;\n  }\n}\n\n// CHARTIST LEGEND =============================================================\n\n.ct-legend {\n  bottom: 0;\n  margin-bottom: -1em;\n\n  li {\n    position: relative;\n    padding-left: 0.5em;\n    list-style-type: none;\n    display: inline-block;\n    margin-right: 0.5em;\n    font-size: 0.8em;\n  }\n\n  li:before {\n    display: inline-block;\n    width: 1em;\n    height: 1em;\n    left: 0;\n    content: '';\n    border: 3px solid transparent;\n    border-radius: 2px;\n    margin-right: 0.2em;\n  }\n\n  li.inactive:before {\n    background: transparent;\n  }\n\n  &.ct-legend-inside {\n    position: absolute;\n    top: 0;\n    right: 0;\n  }\n\n  @for $i from 0 to length($ct-series-colors) {\n    .ct-series-#{$i}:before {\n      background-color: nth($ct-series-colors, $i + 1);\n      border-color: nth($ct-series-colors, $i + 1);\n    }\n  }\n}\n","// METER OBJECT ================================================================\n\n// Used for object utilization (eg SR):\n// success for usage < 80%\n// warning for usage between 80% and 89%\n// error for usage > 90%\n\nmeter {\n  /* For Firefox */\n  background: #eee;\n  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.2) inset;\n  border-radius: 3px;\n}\n\nmeter::-webkit-meter-bar {\n  background: #eee;\n  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.2) inset;\n  border-radius: 3px;\n}\n\nmeter::-webkit-meter-optimum-value {\n  background: $brand-success;\n  border-radius: 3px;\n}\n\nmeter::-webkit-meter-suboptimum-value {\n  background: $brand-warning;\n  border-radius: 3px;\n}\n\nmeter::-webkit-meter-even-less-good-value {\n  background: $brand-danger;\n  border-radius: 3px;\n}\n\nmeter::-moz-meter-bar {\n  border-radius: 3px;\n}\n\nmeter:-moz-meter-optimum::-moz-meter-bar {\n  background: $brand-success;\n}\n\nmeter:-moz-meter-sub-optimum::-moz-meter-bar {\n  background: $brand-warning;\n}\n\nmeter:-moz-meter-sub-sub-optimum::-moz-meter-bar {\n  background: $brand-danger;\n}\n",".xo-icon {\n  &-pro-support {\n    @extend .fa;\n    @extend .fa-file-text;\n  }\n  &-pool {\n    @extend .fa;\n    @extend .fa-cloud;\n  }\n  &-host {\n    @extend .fa;\n    @extend .fa-server;\n  }\n  &-vm {\n    @extend .fa;\n    @extend .fa-desktop;\n  }\n  &-proxy {\n    @extend .fa;\n    @extend .fa-globe;\n  }\n  &-remote {\n    @extend .fa;\n    @extend .fa-plug;\n  }\n  &-task {\n    @extend .fa;\n    @extend .fa-tasks;\n  }\n  &-clean-vm {\n    @extend .fa;\n    @extend .fa-recycle;\n  }\n  &-template {\n    @extend .fa;\n    @extend .fa-thumb-tack;\n  }\n  &-plugin {\n    @extend .fa;\n    @extend .fa-puzzle-piece;\n  }\n  &-message {\n    @extend .fa;\n    @extend .fa-envelope-o;\n  }\n  &-logs {\n    @extend .fa;\n    @extend .fa-list;\n  }\n  &-alarm {\n    @extend .fa;\n    @extend .fa-exclamation-triangle;\n  }\n  &-error {\n    @extend .fa;\n    @extend .fa-exclamation-triangle;\n    @extend .text-danger;\n  }\n  &-success {\n    @extend .fa;\n    @extend .fa-check;\n    @extend .text-success;\n  }\n  &-true {\n    @extend .fa;\n    @extend .fa-check;\n    @extend .text-success;\n  }\n  &-false {\n    @extend .fa;\n    @extend .fa-times;\n  }\n  &-undo {\n    @extend .fa;\n    @extend .fa-undo;\n    @extend .text-warning;\n  }\n  &-edition {\n    @extend .fa;\n    @extend .fa-pencil-square-o;\n  }\n  &-edit {\n    @extend .fa;\n    @extend .fa-pencil;\n  }\n  &-refresh {\n    @extend .fa;\n    @extend .fa-refresh;\n  }\n  &-administration {\n    @extend .fa;\n    @extend .fa-wrench;\n  }\n  &-diagnosis {\n    @extend .fa;\n    @extend .fa-medkit;\n  }\n  &-chevron-up {\n    @extend .fa;\n    @extend .fa-chevron-up;\n  }\n  &-chevron-down {\n    @extend .fa;\n    @extend .fa-chevron-down;\n  }\n  &-hub-recipe {\n    @extend .fa;\n    @extend .fa-wpforms;\n  }\n  &-hub-template {\n    @extend .fa;\n    @extend .fa-cube;\n  }\n  &-audit {\n    @extend .fa;\n    @extend .fa-list-alt;\n  }\n\n  &-grab {\n    @extend .fa;\n    @extend .fa-ellipsis-v;\n  }\n  &-previous {\n    @extend .fa;\n    @extend .fa-chevron-left;\n  }\n  &-next {\n    @extend .fa;\n    @extend .fa-chevron-right;\n  }\n  &-caret {\n    @extend .fa;\n    @extend .fa-caret-down;\n  }\n  &-caret-up {\n    @extend .fa;\n    @extend .fa-caret-up;\n  }\n  &-coalesce {\n    @extend .fa;\n    @extend .fa-cog;\n  }\n  &-loading {\n    @extend .fa;\n    @extend .fa-spinner;\n    @extend .fa-pulse;\n  }\n  &-clipboard {\n    @extend .fa;\n    @extend .fa-clipboard;\n  }\n  &-download {\n    @extend .fa;\n    @extend .fa-download;\n  }\n  &-upload {\n    @extend .fa;\n    @extend .fa-upload;\n  }\n  &-shortcuts {\n    @extend .fa;\n    @extend .fa-keyboard-o;\n  }\n  &-git {\n    @extend .fa;\n    @extend .fa-git-square;\n  }\n  &-info {\n    @extend .fa;\n    @extend .fa-info-circle;\n  }\n  &-search {\n    @extend .fa;\n    @extend .fa-search;\n  }\n  &-settings {\n    @extend .fa;\n    @extend .fa-cog;\n  }\n  &-summary {\n    @extend .fa;\n    @extend .fa-flag-checkered;\n  }\n  &-run {\n    @extend .fa;\n    @extend .fa-play;\n  }\n  &-freeze {\n    @extend .fa;\n    @extend .fa-snowflake-o;\n  }\n  &-forget {\n    @extend .fa;\n    @extend .fa-ban;\n  }\n  &-destroy {\n    @extend .fa;\n    @extend .fa-trash;\n  }\n  &-force-restart {\n    @extend .fa;\n    @extend .fa-forward;\n  }\n  &-ssh-key {\n    @extend .fa;\n    @extend .fa-key;\n  }\n  &-ip {\n    @extend .fa;\n    @extend .fa-map-marker;\n  }\n  &-file {\n    @extend .fa;\n    @extend .fa-file-o;\n  }\n\n  &-shown {\n    @extend .fa;\n    @extend .fa-eye;\n  }\n  &-hidden {\n    @extend .fa;\n    @extend .fa-eye-slash;\n  }\n\n  &-password {\n    @extend .fa;\n    @extend .fa-key;\n  }\n\n  &-toggle-on {\n    @extend .fa;\n    @extend .fa-toggle-on;\n  }\n\n  &-toggle-off {\n    @extend .fa;\n    @extend .fa-toggle-off;\n  }\n\n  &-scale {\n    @extend .fa;\n    @extend .fa-balance-scale;\n  }\n\n  &-asc {\n    @extend .fa;\n    @extend .fa-arrow-down;\n  }\n  &-desc {\n    @extend .fa;\n    @extend .fa-arrow-up;\n  }\n  &-sort {\n    @extend .fa;\n    @extend .fa-sort;\n  }\n\n  &-connect {\n    @extend .fa;\n    @extend .fa-link;\n  }\n  &-disconnect {\n    @extend .fa;\n    @extend .fa-chain-broken;\n  }\n\n  &-lock {\n    @extend .fa;\n    @extend .fa-lock;\n  }\n  &-unlock {\n    @extend .fa;\n    @extend .fa-unlock;\n  }\n  &-unknown-status {\n    @extend .fa;\n    @extend .fa-question-circle;\n  }\n\n  &-cpu {\n    @extend .fa;\n    @extend .fa-microchip;\n  }\n  &-gpu {\n    @extend .fa;\n    @extend .fa-microchip;\n  }\n  &-vgpu {\n    @extend .fa;\n    @extend .fa-microchip;\n  }\n  &-memory {\n    @extend .fa;\n    @extend .fa-sliders;\n  }\n  &-disk {\n    @extend .fa;\n    @extend .fa-hdd-o;\n  }\n  &-network {\n    @extend .fa;\n    @extend .fa-sitemap;\n  }\n  &-sr {\n    @extend .fa;\n    @extend .fa-database;\n  }\n  &-iops {\n    @extend .fa;\n    @extend .fa-cogs;\n  }\n  &-latency {\n    @extend .fa;\n    @extend .fa-clock-o;\n  }\n  &-iowait {\n    @extend .fa;\n    @extend .fa-pause;\n  }\n  &-delete {\n    @extend .fa;\n    @extend .fa-trash;\n  }\n  &-self-service {\n    @extend .fa;\n    @extend .fa-cloud;\n  }\n  &-resource-set {\n    @extend .fa;\n    @extend .fa-list-alt;\n  }\n  &-trial {\n    @extend .fa;\n    @extend .fa-thumbs-up;\n  }\n  &-deploy {\n    @extend .fa;\n    @extend .fa-rocket;\n  }\n  &-telemetry {\n    @extend .fa;\n    @extend .fa-area-chart;\n  }\n  &-ticket {\n    @extend .fa;\n    @extend .fa-ticket;\n  }\n  &-circle {\n    @extend .fa;\n    @extend .fa-circle;\n  }\n  &-circle-thin {\n    @extend .fa;\n    @extend .fa-circle-thin;\n  }\n  &-api {\n    @extend .fa;\n    @extend .fa-code;\n  }\n  &-favorite {\n    @extend .fa;\n    @extend .fa-star;\n  }\n\n  // Backups\n  &-backup {\n    @extend .fa;\n    @extend .fa-download;\n  }\n  &-check {\n    @extend .fa;\n    @extend .fa-check;\n  }\n  &-mirror-backup {\n    @extend .fa;\n    @extend .fa-files-o;\n  }\n  &-restore {\n    @extend .fa;\n    @extend .fa-upload;\n  }\n  &-rolling-snapshot {\n    @extend .fa;\n    @extend .fa-camera;\n  }\n  &-delta-backup {\n    @extend .fa;\n    @extend .fa-code-fork;\n  }\n  &-disaster-recovery {\n    @extend .fa;\n    @extend .fa-medkit;\n  }\n  &-continuous-replication {\n    @extend .fa;\n    @extend .fa-map-signs;\n  }\n  &-files {\n    @extend .fa;\n    @extend .fa-object-group;\n  }\n  &-folder {\n    @extend .fa;\n    @extend .fa-folder;\n  }\n\n  &-health {\n    @extend .fa;\n    @extend .fa-heartbeat;\n  }\n\n  // Jobs\n  &-jobs {\n    @extend .fa;\n    @extend .fa-cogs;\n  }\n  &-migrate-job {\n    @extend .fa;\n    @extend .fa-share;\n  }\n\n  // IPMI\n  &-cpu-temperature {\n    @extend .fa;\n    @extend .fa-thermometer-full;\n  }\n  &-fan-speed {\n    @extend .fa;\n    @extend .fa-circle-o-notch;\n  }\n  &-fan-status {\n    @extend .fa;\n    @extend .fa-medkit;\n  }\n  &-inlet {\n    @extend .fa;\n    @extend .fa-sign-in;\n  }\n  &-ipmi {\n    @extend .fa;\n    @extend .fa-wrench;\n  }\n  &-outlet {\n    @extend .fa;\n    @extend .fa-sign-out;\n  }\n  &-psu {\n    @extend .fa;\n    @extend .fa-plug;\n  }\n  &-total-power {\n    @extend .fa;\n    @extend .fa-tachometer;\n  }\n  &-bios-version {\n    @extend .fa;\n    @extend .fa-microchip;\n  }\n\n  // VM\n  &-vm {\n    // States\n    &-running {\n      @extend .fa;\n      @extend .fa-desktop;\n      @extend .xo-status-running;\n    }\n    &-suspended {\n      @extend .fa;\n      @extend .fa-desktop;\n      @extend .xo-status-suspended;\n    }\n    &-paused {\n      @extend .fa;\n      @extend .fa-desktop;\n      @extend .xo-status-paused;\n    }\n    &-halted {\n      @extend .fa;\n      @extend .fa-desktop;\n      @extend .xo-status-halted;\n    }\n    &-busy {\n      @extend .fa;\n      @extend .fa-desktop;\n      @extend .xo-status-busy;\n    }\n\n    // Actions\n    &-create-template {\n      @extend .fa;\n      @extend .fa-thumb-tack;\n    }\n    &-copy {\n      @extend .fa;\n      @extend .fa-clone;\n    }\n    &-console {\n      @extend .fa;\n      @extend .fa-terminal;\n    }\n    &-migrate {\n      @extend .fa;\n      @extend .fa-share;\n    }\n    &-snapshot {\n      @extend .fa;\n      @extend .fa-camera;\n    }\n    &-fast-clone {\n      @extend .fa;\n      @extend .fa-code-fork;\n    }\n    &-clone {\n      @extend .fa;\n      @extend .fa-copy;\n    }\n    &-suspend {\n      @extend .fa;\n      @extend .fa-power-off;\n    }\n    &-pause {\n      @extend .fa;\n      @extend .fa-pause;\n    }\n    &-force-reboot {\n      @extend .fa;\n      @extend .fa-bolt;\n    }\n    &-recovery-mode {\n      @extend .fa;\n      @extend .fa-forward;\n    }\n    &-force-shutdown {\n      @extend .fa;\n      @extend .fa-plug;\n    }\n    &-docker {\n      @extend .fa;\n      @extend .text-primary;\n      @extend .fa-ship;\n    }\n    &-share {\n      @extend .fa;\n      @extend .fa-list-alt;\n    }\n    &-warm-migration {\n      @extend .fa;\n      @extend .fa-fire;\n    }\n\n    &-coalesce-leaf {\n      @extend .fa;\n      @extend .fa-compress;\n    }\n  }\n\n  // Generic states\n  &-running {\n    @extend .fa;\n    @extend .fa-circle;\n    @extend .xo-status-running;\n  }\n\n  &-skipped {\n    @extend .fa;\n    @extend .fa-circle;\n    @extend .xo-status-suspended;\n  }\n\n  &-halted {\n    @extend .fa;\n    @extend .fa-circle;\n    @extend .xo-status-halted;\n  }\n\n  &-suspended {\n    @extend .fa;\n    @extend .fa-circle;\n    @extend .xo-status-suspended;\n  }\n\n  &-paused {\n    @extend .fa;\n    @extend .fa-circle;\n    @extend .xo-status-paused;\n  }\n\n  &-unknown {\n    @extend .fa;\n    @extend .fa-circle;\n    @extend .xo-status-unknown;\n  }\n\n  &-busy {\n    @extend .fa;\n    @extend .fa-circle;\n    @extend .xo-status-busy;\n  }\n\n  &-disabled {\n    @extend .fa;\n    @extend .fa-circle;\n    @extend .xo-status-disabled;\n  }\n\n  &-powerState {\n    @extend .fa;\n    @extend .fa-power-off;\n  }\n\n  &-all-connected {\n    @extend .fa;\n    @extend .fa-circle;\n    @extend .xo-status-running;\n  }\n\n  &-some-connected {\n    @extend .fa;\n    @extend .fa-circle;\n    @extend .xo-status-busy;\n  }\n\n  &-all-disconnected {\n    @extend .fa;\n    @extend .fa-circle;\n    @extend .xo-status-halted;\n  }\n\n  &-connected {\n    @extend .fa;\n    @extend .fa-link;\n  }\n\n  &-disconnected {\n    @extend .fa;\n    @extend .fa-unlink;\n  }\n\n  // Task\n  &-task {\n    &-cancel {\n      @extend .fa;\n      @extend .fa-ban;\n    }\n    &-destroy {\n      @extend .fa;\n      @extend .fa-trash;\n    }\n  }\n\n  // SR\n  &-sr,\n  &-vdi {\n    &-disable {\n      @extend .fa;\n      @extend .fa-times-circle;\n    }\n    &-enable {\n      @extend .fa;\n      @extend .fa-wrench;\n    }\n    &-reconnect-all {\n      @extend .fa;\n      @extend .fa-retweet;\n    }\n    &-disconnect-all {\n      @extend .fa;\n      @extend .fa-power-off;\n    }\n    &-forget {\n      @extend .fa;\n      @extend .fa-ban;\n    }\n    &-remove {\n      @extend .fa;\n      @extend .fa-trash;\n    }\n    &-migrate {\n      @extend .fa;\n      @extend .fa-share;\n    }\n    &-reclaim-space {\n      @extend .fa;\n      @extend .fa-gavel;\n    }\n  }\n  // Host\n  &-host {\n    // States\n    &-running {\n      @extend .fa;\n      @extend .fa-server;\n      @extend .xo-status-running;\n    }\n    &-halted {\n      @extend .fa;\n      @extend .fa-server;\n      @extend .xo-status-halted;\n    }\n    &-disabled {\n      @extend .fa;\n      @extend .fa-server;\n      @extend .xo-status-disabled;\n    }\n    &-busy {\n      @extend .fa;\n      @extend .fa-server;\n      @extend .xo-status-busy;\n    }\n    &-forget {\n      @extend .fa;\n      @extend .fa-ban;\n    }\n\n    // Actions\n    &-enable {\n      @extend .fa;\n      @extend .fa-check-circle;\n    }\n    &-disable {\n      @extend .fa;\n      @extend .fa-times-circle;\n    }\n    &-restart-agent {\n      @extend .fa;\n      @extend .fa-retweet;\n    }\n    &-emergency-shutdown {\n      @extend .fa;\n      @extend .fa-exclamation-triangle;\n    }\n    &-patch-update {\n      @extend .fa;\n      @extend .fa-download;\n    }\n  }\n\n  &-pool {\n    &-rolling-update {\n      @extend .fa;\n      @extend .fa-angle-double-down;\n    }\n    &-rolling-reboot {\n      @extend .fa;\n      @extend .fa-circle-o-notch;\n    }\n  }\n\n  &-vif {\n    &-disable {\n      @extend .fa;\n      @extend .fa-times;\n    }\n  }\n\n  // Host and VM actions\n  &-host,\n  &-vm {\n    &-start {\n      @extend .fa;\n      @extend .fa-play;\n    }\n    &-delete {\n      @extend .fa;\n      @extend .fa-trash;\n    }\n    &-stop {\n      @extend .fa;\n      @extend .fa-stop;\n    }\n    &-force-reboot {\n      @extend .fa;\n      @extend .fa-bolt;\n    }\n    &-reboot {\n      @extend .fa;\n      @extend .fa-refresh;\n    }\n    &-eject {\n      @extend .fa;\n      @extend .fa-eject;\n    }\n    &-keyboard {\n      @extend .fa;\n      @extend .fa-keyboard-o;\n    }\n    &-new {\n      @extend .fa;\n      @extend .fa-plus;\n    }\n  }\n\n  &-snapshot {\n    &-revert {\n      @extend .fa;\n      @extend .fa-refresh;\n    }\n    &-delete {\n      @extend .fa;\n      @extend .fa-trash;\n    }\n    &-current-state {\n      @extend .fa;\n      @extend .fa-check;\n    }\n  }\n\n  &-filters {\n    @extend .fa;\n    @extend .fa-filter;\n  }\n\n  &-tags {\n    @extend .fa;\n    @extend .fa-tags;\n  }\n\n  &-remove-tag {\n    @extend .fa;\n    @extend .fa-times;\n  }\n\n  &-add {\n    @extend .fa;\n    @extend .fa-plus;\n  }\n\n  &-add-tag {\n    @extend .fa;\n    @extend .fa-plus;\n  }\n\n  &-sort {\n    @extend .fa;\n    @extend .fa-sort;\n  }\n  &-reset {\n    @extend .fa;\n    @extend .fa-undo;\n  }\n  &-save {\n    @extend .fa;\n    @extend .fa-floppy-o;\n  }\n  &-delete {\n    @extend .fa;\n    @extend .fa-trash;\n  }\n  &-remove {\n    @extend .fa;\n    @extend .fa-times;\n  }\n  &-rdp {\n    @extend .fa;\n    @extend .fa-exchange;\n  }\n  &-minus {\n    @extend .fa;\n    @extend .fa-minus;\n  }\n  &-plus {\n    @extend .fa;\n    @extend .fa-plus;\n  }\n  &-clear-search {\n    @extend .fa;\n    @extend .fa-times-circle;\n  }\n\n  &-preview {\n    @extend .fa;\n    @extend .fa-eye;\n  }\n  &-backup {\n    @extend .fa;\n    @extend .fa-archive;\n  }\n  &-import {\n    @extend .fa;\n    @extend .fa-file-archive-o;\n  }\n  &-export {\n    @extend .fa;\n    @extend .fa-download;\n  }\n  &-schedule {\n    @extend .fa;\n    @extend .fa-clock-o;\n  }\n  &-time {\n    @extend .fa;\n    @extend .fa-clock-o;\n  }\n  &-database {\n    @extend .fa;\n    @extend .fa-database;\n  }\n  &-arrow-right {\n    @extend .fa;\n    @extend .fa-arrow-right;\n  }\n\n  &-run-schedule {\n    @extend .fa;\n    @extend .fa-play;\n  }\n\n  &-user {\n    @extend .fa;\n    @extend .fa-user;\n  }\n  &-group {\n    @extend .fa;\n    @extend .fa-users;\n  }\n  &-sign-out {\n    @extend .fa;\n    @extend .fa-sign-out;\n  }\n\n  &-multiline-clipboard {\n    @extend .fa;\n    @extend .fa-file-text-o;\n  }\n\n  // Menu\n  &-menu-collapse {\n    @extend .fa;\n    @extend .fa-bars;\n  }\n  &-menu-home {\n    @extend .fa;\n    @extend .fa-home;\n  }\n  &-menu-dashboard {\n    @extend .fa;\n    @extend .fa-dashboard;\n    &-overview {\n      @extend .fa;\n      @extend .fa-eye;\n    }\n    &-visualization {\n      @extend .fa;\n      @extend .fa-pie-chart;\n    }\n    &-stats {\n      @extend .fa;\n      @extend .fa-bar-chart;\n    }\n    &-health {\n      @extend .fa;\n      @extend .fa-heartbeat;\n    }\n  }\n  &-menu-self-service {\n    @extend .fa;\n    @extend .fa-cloud;\n  }\n  &-menu-backup {\n    @extend .fa;\n    @extend .fa-archive;\n    &-overview {\n      @extend .fa;\n      @extend .fa-eye;\n    }\n    &-sequence {\n      @extend .fa;\n      @extend .fa-list-ol;\n    }\n    &-new {\n      @extend .fa;\n      @extend .fa-plus;\n    }\n    &-remotes {\n      @extend .fa;\n      @extend .fa-plug;\n    }\n    &-restore {\n      @extend .fa;\n      @extend .fa-upload;\n    }\n    &-file-restore {\n      @extend .fa;\n      @extend .fa-file-o;\n    }\n  }\n  &-menu-jobs {\n    @extend .fa;\n    @extend .fa-cogs;\n    &-overview {\n      @extend .fa;\n      @extend .fa-eye;\n    }\n    &-new {\n      @extend .fa;\n      @extend .fa-plus;\n    }\n    &-schedule {\n      @extend .fa;\n      @extend .fa-clock-o;\n    }\n  }\n  &-menu-xoa {\n    @extend .fa;\n    @extend .fa-cube;\n  }\n  &-menu-update {\n    @extend .fa;\n    @extend .fa-refresh;\n  }\n  &-menu-license {\n    @extend .fa;\n    @extend .fa-file-text-o;\n  }\n  &-menu-notification {\n    @extend .fa;\n    @extend .fa-bell;\n  }\n  &-menu-support {\n    @extend .fa;\n    @extend .fa-support;\n  }\n  &-menu-settings {\n    @extend .fa;\n    @extend .fa-cog;\n    &-servers {\n      @extend .fa;\n      @extend .fa-cloud;\n    }\n    &-users {\n      @extend .fa;\n      @extend .fa-user;\n    }\n    &-groups {\n      @extend .fa;\n      @extend .fa-users;\n    }\n    &-acls {\n      @extend .fa;\n      @extend .fa-key;\n    }\n    &-plugins {\n      @extend .fa;\n      @extend .fa-puzzle-piece;\n    }\n    &-logs {\n      @extend .fa;\n      @extend .fa-list;\n    }\n    &-config {\n      @extend .fa;\n      @extend .fa-file-o;\n    }\n  }\n  &-menu-about {\n    @extend .fa;\n    @extend .fa-info;\n  }\n  &-menu-new {\n    @extend .fa;\n    @extend .fa-plus;\n    &-vm {\n      @extend .fa;\n      @extend .fa-desktop;\n    }\n    &-sr {\n      @extend .fa;\n      @extend .fa-database;\n    }\n    &-network {\n      @extend .fa;\n      @extend .fa-sitemap;\n    }\n    &-import {\n      @extend .fa;\n      @extend .fa-file-archive-o;\n    }\n  }\n  &-menu-xostor {\n    @extend .fa;\n    @extend .fa-database;\n  }\n  &-menu-hub {\n    @extend .fa;\n    @extend .fa-cubes;\n  }\n  // New VM\n  &-new-vm {\n    &-infos {\n      @extend .fa;\n      @extend .fa-info-circle;\n    }\n    &-perf {\n      @extend .fa;\n      @extend .fa-dashboard;\n    }\n    &-install-settings {\n      @extend .fa;\n      @extend .fa-download;\n    }\n    &-interfaces {\n      @extend .fa;\n      @extend .fa-sitemap;\n    }\n    &-disks {\n      @extend .fa;\n      @extend .fa-hdd-o;\n    }\n    &-summary {\n      @extend .fa;\n      @extend .fa-flag-checkered;\n    }\n    &-create {\n      @extend .fa;\n      @extend .fa-play;\n    }\n    &-reset {\n      @extend .fa;\n      @extend .fa-undo;\n    }\n    &-add {\n      @extend .fa;\n      @extend .fa-plus;\n    }\n    &-remove {\n      @extend .fa;\n      @extend .fa-times;\n    }\n  }\n  // New network\n  &-new-network {\n    &-create {\n      @extend .fa;\n      @extend .fa-play;\n    }\n  }\n  //  OS Icons\n  &-centos {\n    @extend .fa;\n    @extend .icon-centos;\n  }\n  &-debian {\n    @extend .fa;\n    @extend .icon-debian;\n  }\n  &-docker {\n    @extend .fa;\n    @extend .icon-docker;\n  }\n  &-fedora {\n    @extend .fa;\n    @extend .icon-fedora;\n  }\n  &-freebsd {\n    @extend .fa;\n    @extend .icon-freebsd;\n  }\n  &-gentoo {\n    @extend .fa;\n    @extend .icon-gentoo;\n  }\n  &-linux {\n    @extend .fa;\n    @extend .fa-linux;\n  }\n  &-linux-mint {\n    @extend .fa;\n    @extend .icon-linux-mint;\n  }\n  &-netbsd {\n    @extend .fa;\n    @extend .icon-netbsd;\n  }\n  &-oracle {\n    @extend .fa;\n    @extend .icon-oracle;\n  }\n  &-osx {\n    @extend .fa;\n    @extend .icon-osx;\n  }\n  &-redhat {\n    @extend .fa;\n    @extend .icon-redhat;\n  }\n  &-solaris {\n    @extend .fa;\n    @extend .icon-solaris;\n  }\n  &-suse {\n    @extend .fa;\n    @extend .icon-suse;\n  }\n  &-ubuntu {\n    @extend .fa;\n    @extend .icon-ubuntu;\n  }\n  &-windows {\n    @extend .fa;\n    @extend .fa-windows;\n  }\n\n  // link to rest api doc\n  &-rest-api {\n    @extend .fa;\n    @extend .fa-code;\n  }\n  // Home\n  &-nav {\n    @extend .fa;\n    @extend .fa-bars;\n    color: #ccc;\n  }\n\n  // About\n  &-bug {\n    @extend .fa;\n    @extend .fa-bug;\n  }\n  &-help {\n    @extend .fa;\n    @extend .fa-life-ring;\n  }\n\n  // Updates\n  &-upgrade {\n    @extend .fa;\n    @extend .fa-cog;\n  }\n  &-update-unknown {\n    @extend .fa;\n    @extend .fa-question-circle;\n  }\n  &-update-ready {\n    @extend .fa;\n    @extend .fa-bell;\n  }\n  &-not-registered {\n    @extend .fa;\n    @extend .fa-bell-slash;\n  }\n\n  // Generic actions\n\n  &-add-sr {\n    @extend .fa;\n    @extend .fa-database;\n  }\n  &-add-vm {\n    @extend .fa;\n    @extend .fa-desktop;\n  }\n  &-add-host {\n    @extend .fa;\n    @extend .fa-server;\n  }\n  &-connect {\n    @extend .fa;\n    @extend .fa-link;\n  }\n  &-disconnect {\n    @extend .fa;\n    @extend .fa-unlink;\n  }\n  &-refresh {\n    @extend .fa;\n    @extend .fa-refresh;\n  }\n  &-cancel {\n    @extend .fa;\n    @extend .fa-ban;\n  }\n\n  // XOA related\n\n  &-plan-upgrade {\n    @extend .fa;\n    @extend .fa-cloud-upload;\n  }\n  &-plan-trial {\n    @extend .fa;\n    @extend .fa-star;\n  }\n  &-support {\n    @extend .fa;\n    @extend .fa-support;\n  }\n  &-notification {\n    @extend .fa;\n    @extend .fa-bell;\n  }\n  &-reply {\n    @extend .fa;\n    @extend .fa-share;\n  }\n  &-open-tunnel {\n    @extend .fa;\n    @extend .fa-arrows-h;\n  }\n  &-xo-cloud-config {\n    @extend .fa;\n    @extend .fa-cloud-upload;\n  }\n  &-restart {\n    @extend .fa;\n    @extend .fa-refresh;\n  }\n\n  // XOSAN related\n\n  &-health {\n    @extend .fa;\n    @extend .fa-heartbeat;\n  }\n  &-fix {\n    @extend .fa;\n    @extend .fa-wrench;\n  }\n}\n","// Usage\n\n.usage {\n  @extend .progress;\n  background-color: #eee;\n  height: 2em;\n  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25) inset;\n  margin-top: 1em;\n  margin-bottom: 2em;\n}\n\n.usage-element {\n  background-color: #5cb85c;\n  box-shadow: -1px 0 0 0 white;\n  height: 2em;\n  display: inline-block;\n  transition: all 0.3s ease 0s;\n}\n\n.usage-element-highlight {\n  background-color: $brand-warning;\n}\n\n.usage-element-others {\n  background-color: #5cb85c75;\n}\n\n.usage-element:hover {\n  opacity: 0.6;\n}\n\n// Limits\n\n.limits {\n  @extend .progress;\n  background-color: #eee;\n  height: 1.1em;\n  width: 100%;\n  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25) inset;\n}\n\n.limits-element {\n  background-color: #5cb85c;\n  height: 100%;\n  display: inline-block;\n  transition: all 0.3s ease 0s;\n}\n\n.limits-used {\n  @extend .limits-element;\n  background-color: $brand-primary;\n}\n\n.limits-to-be-used {\n  @extend .limits-element;\n  background-color: $brand-success;\n}\n\n.limits-over-used {\n  @extend .limits-element;\n  background-color: $brand-danger;\n}\n","/* Collection default theme */\n\n.ReactVirtualized__Collection {\n}\n\n.ReactVirtualized__Collection__innerScrollContainer {\n}\n\n/* Grid default theme */\n\n.ReactVirtualized__Grid {\n}\n\n.ReactVirtualized__Grid__innerScrollContainer {\n}\n\n/* Table default theme */\n\n.ReactVirtualized__Table {\n}\n\n.ReactVirtualized__Table__Grid {\n}\n\n.ReactVirtualized__Table__headerRow {\n  font-weight: 700;\n  text-transform: uppercase;\n  display: -webkit-box;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n          flex-direction: row;\n  -webkit-box-align: center;\n          align-items: center;\n}\n.ReactVirtualized__Table__row {\n  display: -webkit-box;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n          flex-direction: row;\n  -webkit-box-align: center;\n          align-items: center;\n}\n\n.ReactVirtualized__Table__headerTruncatedText {\n  display: inline-block;\n  max-width: 100%;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n\n.ReactVirtualized__Table__headerColumn,\n.ReactVirtualized__Table__rowColumn {\n  margin-right: 10px;\n  min-width: 0px;\n}\n.ReactVirtualized__Table__rowColumn {\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.ReactVirtualized__Table__headerColumn:first-of-type,\n.ReactVirtualized__Table__rowColumn:first-of-type {\n  margin-left: 10px;\n}\n.ReactVirtualized__Table__sortableHeaderColumn {\n  cursor: pointer;\n}\n\n.ReactVirtualized__Table__sortableHeaderIconContainer {\n  display: -webkit-box;\n  display: flex;\n  -webkit-box-align: center;\n          align-items: center;\n}\n.ReactVirtualized__Table__sortableHeaderIcon {\n  -webkit-box-flex: 0;\n          flex: 0 0 24px;\n  height: 1em;\n  width: 1em;\n  fill: currentColor;\n}\n\n/* List default theme */\n\n.ReactVirtualized__List {\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNvdXJjZS9zdHlsZXMuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2Qjs7QUFFN0I7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1Qjs7QUFFdkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdCQUF3Qjs7QUFFeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0VBQ0UsZ0JBQWdCO0VBQ2hCLHlCQUF5QjtFQUN6QixvQkFBYTtFQUFiLGFBQWE7RUFDYiw4QkFBbUI7RUFBbkIsNkJBQW1CO1VBQW5CLG1CQUFtQjtFQUNuQix5QkFBbUI7VUFBbkIsbUJBQW1CO0FBQ3JCO0FBQ0E7RUFDRSxvQkFBYTtFQUFiLGFBQWE7RUFDYiw4QkFBbUI7RUFBbkIsNkJBQW1CO1VBQW5CLG1CQUFtQjtFQUNuQix5QkFBbUI7VUFBbkIsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0UscUJBQXFCO0VBQ3JCLGVBQWU7RUFDZixtQkFBbUI7RUFDbkIsdUJBQXVCO0VBQ3ZCLGdCQUFnQjtBQUNsQjs7QUFFQTs7RUFFRSxrQkFBa0I7RUFDbEIsY0FBYztBQUNoQjtBQUNBO0VBQ0UsdUJBQXVCO0VBQ3ZCLG1CQUFtQjtBQUNyQjs7QUFFQTs7RUFFRSxpQkFBaUI7QUFDbkI7QUFDQTtFQUNFLGVBQWU7QUFDakI7O0FBRUE7RUFDRSxvQkFBYTtFQUFiLGFBQWE7RUFDYix5QkFBbUI7VUFBbkIsbUJBQW1CO0FBQ3JCO0FBQ0E7RUFDRSxtQkFBYztVQUFkLGNBQWM7RUFDZCxXQUFXO0VBQ1gsVUFBVTtFQUNWLGtCQUFrQjtBQUNwQjs7QUFFQSx1QkFBdUI7O0FBRXZCO0FBQ0EiLCJmaWxlIjoic3R5bGVzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIENvbGxlY3Rpb24gZGVmYXVsdCB0aGVtZSAqL1xuXG4uUmVhY3RWaXJ0dWFsaXplZF9fQ29sbGVjdGlvbiB7XG59XG5cbi5SZWFjdFZpcnR1YWxpemVkX19Db2xsZWN0aW9uX19pbm5lclNjcm9sbENvbnRhaW5lciB7XG59XG5cbi8qIEdyaWQgZGVmYXVsdCB0aGVtZSAqL1xuXG4uUmVhY3RWaXJ0dWFsaXplZF9fR3JpZCB7XG59XG5cbi5SZWFjdFZpcnR1YWxpemVkX19HcmlkX19pbm5lclNjcm9sbENvbnRhaW5lciB7XG59XG5cbi8qIFRhYmxlIGRlZmF1bHQgdGhlbWUgKi9cblxuLlJlYWN0VmlydHVhbGl6ZWRfX1RhYmxlIHtcbn1cblxuLlJlYWN0VmlydHVhbGl6ZWRfX1RhYmxlX19HcmlkIHtcbn1cblxuLlJlYWN0VmlydHVhbGl6ZWRfX1RhYmxlX19oZWFkZXJSb3cge1xuICBmb250LXdlaWdodDogNzAwO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLlJlYWN0VmlydHVhbGl6ZWRfX1RhYmxlX19yb3cge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uUmVhY3RWaXJ0dWFsaXplZF9fVGFibGVfX2hlYWRlclRydW5jYXRlZFRleHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5SZWFjdFZpcnR1YWxpemVkX19UYWJsZV9faGVhZGVyQ29sdW1uLFxuLlJlYWN0VmlydHVhbGl6ZWRfX1RhYmxlX19yb3dDb2x1bW4ge1xuICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIG1pbi13aWR0aDogMHB4O1xufVxuLlJlYWN0VmlydHVhbGl6ZWRfX1RhYmxlX19yb3dDb2x1bW4ge1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLlJlYWN0VmlydHVhbGl6ZWRfX1RhYmxlX19oZWFkZXJDb2x1bW46Zmlyc3Qtb2YtdHlwZSxcbi5SZWFjdFZpcnR1YWxpemVkX19UYWJsZV9fcm93Q29sdW1uOmZpcnN0LW9mLXR5cGUge1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cbi5SZWFjdFZpcnR1YWxpemVkX19UYWJsZV9fc29ydGFibGVIZWFkZXJDb2x1bW4ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5SZWFjdFZpcnR1YWxpemVkX19UYWJsZV9fc29ydGFibGVIZWFkZXJJY29uQ29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5SZWFjdFZpcnR1YWxpemVkX19UYWJsZV9fc29ydGFibGVIZWFkZXJJY29uIHtcbiAgZmxleDogMCAwIDI0cHg7XG4gIGhlaWdodDogMWVtO1xuICB3aWR0aDogMWVtO1xuICBmaWxsOiBjdXJyZW50Q29sb3I7XG59XG5cbi8qIExpc3QgZGVmYXVsdCB0aGVtZSAqL1xuXG4uUmVhY3RWaXJ0dWFsaXplZF9fTGlzdCB7XG59XG4iXX0= */","//\n// Mixins\n// ------------------------------\n\n\n// Utilities\n\n@mixin size($width, $height)\n{\n\twidth: $width;\n\theight: $height;\n}\n@mixin square($size)\n{\n\t@include size($size, $size);\n}\n@mixin border-top-radius($radius)\n{\n\tborder-top-right-radius: $radius;\n\tborder-top-left-radius: $radius;\n}\n@mixin border-right-radius($radius)\n{\n\tborder-bottom-right-radius: $radius;\n\tborder-top-right-radius: $radius;\n}\n@mixin border-bottom-radius($radius)\n{\n\tborder-bottom-right-radius: $radius;\n\tborder-bottom-left-radius: $radius;\n}\n@mixin border-left-radius($radius)\n{\n\tborder-bottom-left-radius: $radius;\n\tborder-top-left-radius: $radius;\n}\n\n\n// Vendor Prefixes\n\n@mixin animation($animation)\n{\n\t-webkit-animation: $animation;\n\t-o-animation: $animation;\n\tanimation: $animation;\n}\n@mixin box-sizing($boxmodel)\n{\n\t-webkit-box-sizing: $boxmodel;\n\t-moz-box-sizing: $boxmodel;\n\tbox-sizing: $boxmodel;\n}\n","//\n// Select Menu\n// ------------------------------\n\n\n// wrapper around the menu\n\n.Select-menu-outer {\n\t// Unfortunately, having both border-radius and allows scrolling using overflow defined on the same\n\t// element forces the browser to repaint on scroll.  However, if these definitions are split into an\n\t// outer and an inner element, the browser is able to optimize the scrolling behavior and does not\n\t// have to repaint on scroll.\n\t@include border-bottom-radius( $select-input-border-radius );\n\tbackground-color: $select-input-bg;\n\tborder: 1px solid $select-input-border-color;\n\tborder-top-color: mix($select-input-bg, $select-input-border-color, 50%);\n\tbox-shadow: $select-menu-box-shadow;\n\tbox-sizing: border-box;\n\tmargin-top: -1px;\n\tmax-height: $select-menu-max-height;\n\tposition: absolute;\n\tleft: 0;\n\ttop: 100%;\n\twidth: 100%;\n\tz-index: $select-menu-zindex;\n\t-webkit-overflow-scrolling: touch;\n}\n\n\n// wrapper\n\n.Select-menu {\n\tmax-height: ($select-menu-max-height - 2px);\n\toverflow-y: auto;\n}\n\n\n// options\n\n.Select-option {\n\tbox-sizing: border-box;\n\tbackground-color: $select-option-bg;\n\tcolor: $select-option-color;\n\tcursor: pointer;\n\tdisplay: block;\n\tpadding: $select-padding-vertical $select-padding-horizontal;\n\n\t&:last-child {\n\t\t@include border-bottom-radius( $select-input-border-radius );\n\t}\n\n\t&.is-selected {\n\t\tbackground-color: $select-option-selected-bg;\n\t\tcolor: $select-option-selected-color;\n\t}\n\n\t&.is-focused {\n\t\tbackground-color: $select-option-focused-bg;\n\t\tcolor: $select-option-focused-color;\n\t}\n\n\t&.is-disabled {\n\t\tcolor: $select-option-disabled-color;\n\t\tcursor: default;\n\t}\n\n}\n\n\n// no results\n\n.Select-noresults {\n\tbox-sizing: border-box;\n\tcolor: $select-noresults-color;\n\tcursor: default;\n\tdisplay: block;\n\tpadding: $select-padding-vertical $select-padding-horizontal;\n}\n","//\n// Multi-Select\n// ------------------------------\n\n\n// Base\n\n.Select--multi {\n\n\t// add margin to the input element\n\t.Select-input {\n\t\tvertical-align: middle;\n\t\t// border: 1px solid transparent;\n\t\tmargin-left: $select-padding-horizontal;\n\t\tpadding: 0;\n\t}\n\t&.Select--rtl .Select-input {\n\t\tmargin-left: 0;\n\t\tmargin-right: $select-padding-horizontal;\n\t}\n\n\t// reduce margin once there is value\n\t&.has-value .Select-input {\n\t\tmargin-left: $select-item-gutter;\n\t}\n\n\t// Items\n\t.Select-value {\n\t\tbackground-color: $select-item-bg;\n\t\tborder-radius: $select-item-border-radius;\n\t\tborder: 1px solid $select-item-border-color;\n\t\tcolor: $select-item-color;\n\t\tdisplay: inline-block;\n\t\tfont-size: $select-item-font-size;\n\t\tmargin-left: $select-item-gutter;\n\t\tmargin-top: $select-item-gutter;\n\t\tvertical-align: top;\n\t}\n\n\t// common\n\t.Select-value-icon,\n\t.Select-value-label {\n\t\tdisplay: inline-block;\n\t\tvertical-align: middle;\n\t}\n\n\t// label\n\t.Select-value-label {\n\t\t@include border-right-radius( $select-item-border-radius );\n\t\tcursor: default;\n\t\tpadding: $select-item-padding-vertical $select-item-padding-horizontal;\n\t}\n\ta.Select-value-label {\n\t\tcolor: $select-item-color;\n\t\tcursor: pointer;\n\t\ttext-decoration: none;\n\n\t\t&:hover {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t}\n\n\t// icon\n\t.Select-value-icon {\n\t\tcursor: pointer;\n\t\t@include border-left-radius( $select-item-border-radius );\n\t\tborder-right: 1px solid $select-item-border-color;\n\n\t\t// move the baseline up by 1px\n\t\tpadding: ($select-item-padding-vertical - 1) $select-item-padding-horizontal ($select-item-padding-vertical + 1);\n\n\t\t&:hover,\n\t\t&:focus {\n\t\t\tbackground-color: $select-item-hover-bg;\n\t\t\tcolor: $select-item-hover-color;\n\t\t}\n\t\t&:active {\n\t\t\tbackground-color: $select-item-border-color;\n\t\t}\n\t}\n\n\t&.Select--rtl {\n\t\t.Select-value {\n\t\t  margin-left: 0;\n\t\t  margin-right: $select-item-gutter;\n\t\t}\n\t\t.Select-value-icon {\n\t\t\tborder-right: none;\n\t\t\tborder-left: 1px solid $select-item-border-color;\n\t\t}\n\t}\n}\n\n.Select--multi.is-disabled {\n\t.Select-value {\n\t\tbackground-color: $select-item-disabled-bg;\n\t\tborder: 1px solid $select-item-disabled-border-color;\n\t\tcolor: $select-item-disabled-color;\n\t}\n\t// icon\n\t.Select-value-icon {\n\t\tcursor: not-allowed;\n\t\tborder-right: 1px solid $select-item-disabled-border-color;\n\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:active {\n\t\t\tbackground-color: $select-item-disabled-bg;\n\t\t}\n\t}\n}\n"]}                                                                                                                                                                                                                                                                                                                                             /*
 * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */

/*
 * This header file preserves symbols from pre-3.0 OpenSSL.
 * It should never be included directly, as it's already included
 * by the public {lib}err.h headers, and since it will go away some
 * time in the future.
 */

#ifndef OPENSSL_CRYPTOERR_LEGACY_H
# define OPENSSL_CRYPTOERR_LEGACY_H
# pragma once

# include <openssl/macros.h>
# include <openssl/symhacks.h>

# ifdef  __cplusplus
extern "C" {
# endif

# ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 int ERR_load_ASN1_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_ASYNC_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_BIO_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_BN_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_BUF_strings(void);
#  ifndef OPENSSL_NO_CMS
OSSL_DEPRECATEDIN_3_0 int ERR_load_CMS_strings(void);
#  endif
#  ifndef OPENSSL_NO_COMP
OSSL_DEPRECATEDIN_3_0 int ERR_load_COMP_strings(void);
#  endif
OSSL_DEPRECATEDIN_3_0 int ERR_load_CONF_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_CRYPTO_strings(void);
#  ifndef OPENSSL_NO_CT
OSSL_DEPRECATEDIN_3_0 int ERR_load_CT_strings(void);
#  endif
#  ifndef OPENSSL_NO_DH
OSSL_DEPRECATEDIN_3_0 int ERR_load_DH_strings(void);
#  endif
#  ifndef OPENSSL_NO_DSA
OSSL_DEPRECATEDIN_3_0 int ERR_load_DSA_strings(void);
#  endif
#  ifndef OPENSSL_NO_EC
OSSL_DEPRECATEDIN_3_0 int ERR_load_EC_strings(void);
#  endif
#  ifndef OPENSSL_NO_ENGINE
OSSL_DEPRECATEDIN_3_0 int ERR_load_ENGINE_strings(void);
#  endif
OSSL_DEPRECATEDIN_3_0 int ERR_load_ERR_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_EVP_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_KDF_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_OBJ_strings(void);
#  ifndef OPENSSL_NO_OCSP
OSSL_DEPRECATEDIN_3_0 int ERR_load_OCSP_strings(void);
#  endif
OSSL_DEPRECATEDIN_3_0 int ERR_load_PEM_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_PKCS12_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_PKCS7_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_RAND_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_RSA_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_OSSL_STORE_strings(void);
#  ifndef OPENSSL_NO_TS
OSSL_DEPRECATEDIN_3_0 int ERR_load_TS_strings(void);
#  endif
OSSL_DEPRECATEDIN_3_0 int ERR_load_UI_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_X509_strings(void);
OSSL_DEPRECATEDIN_3_0 int ERR_load_X509V3_strings(void);

/* Collected _F_ macros from OpenSSL 1.1.1 */

/*
 * ASN1 function codes.
 */
#  define ASN1_F_A2D_ASN1_OBJECT                           0
#  define ASN1_F_A2I_ASN1_INTEGER                          0
#  define ASN1_F_A2I_ASN1_STRING                           0
#  define ASN1_F_APPEND_EXP                                0
#  define ASN1_F_ASN1_BIO_INIT                             0
#  define ASN1_F_ASN1_BIT_STRING_SET_BIT                   0
#  define ASN1_F_ASN1_CB                                   0
#  define ASN1_F_ASN1_CHECK_TLEN                           0
#  define ASN1_F_ASN1_COLLECT                              0
#  define ASN1_F_ASN1_D2I_EX_PRIMITIVE                     0
#  define ASN1_F_ASN1_D2I_FP                               0
#  define ASN1_F_ASN1_D2I_READ_BIO                         0
#  define ASN1_F_ASN1_DIGEST                               0
#  define ASN1_F_ASN1_DO_ADB                               0
#  define ASN1_F_ASN1_DO_LOCK                              0
#  define ASN1_F_ASN1_DUP                                  0
#  define ASN1_F_ASN1_ENC_SAVE                             0
#  define ASN1_F_ASN1_EX_C2I                               0
#  define ASN1_F_ASN1_FIND_END                             0
#  define ASN1_F_ASN1_GENERALIZEDTIME_ADJ                  0
#  define ASN1_F_ASN1_GENERATE_V3                          0
#  define ASN1_F_ASN1_GET_INT64                            0
#  define ASN1_F_ASN1_GET_OBJECT                           0
#  define ASN1_F_ASN1_GET_UINT64                           0
#  define ASN1_F_ASN1_I2D_BIO                              0
#  define ASN1_F_ASN1_I2D_FP                               0
#  define ASN1_F_ASN1_ITEM_D2I_FP                          0
#  define ASN1_F_ASN1_ITEM_DUP                             0
#  define ASN1_F_ASN1_ITEM_EMBED_D2I                       0
#  define ASN1_F_ASN1_ITEM_EMBED_NEW                       0
#  define ASN1_F_ASN1_ITEM_FLAGS_I2D                       0
#  define ASN1_F_ASN1_ITEM_I2D_BIO                         0
#  define ASN1_F_ASN1_ITEM_I2D_FP                          0
#  define ASN1_F_ASN1_ITEM_PACK                            0
#  define ASN1_F_ASN1_ITEM_SIGN                            0
#  define ASN1_F_ASN1_ITEM_SIGN_CTX                        0
#  define ASN1_F_ASN1_ITEM_UNPACK                          0
#  define ASN1_F_ASN1_ITEM_VERIFY                          0
#  define ASN1_F_ASN1_MBSTRING_NCOPY                       0
#  define ASN1_F_ASN1_OBJECT_NEW                           0
#  define ASN1_F_ASN1_OUTPUT_DATA                          0
#  define ASN1_F_ASN1_PCTX_NEW                             0
#  define ASN1_F_ASN1_PRIMITIVE_NEW                        0
#  define ASN1_F_ASN1_SCTX_NEW                             0
#  define ASN1_F_ASN1_SIGN                                 0
#  define ASN1_F_ASN1_STR2TYPE                             0
#  define ASN1_F_ASN1_STRING_GET_INT64                     0
#  define ASN1_F_ASN1_STRING_GET_UINT64                    0
#  define ASN1_F_ASN1_STRING_SET                           0
#  define ASN1_F_ASN1_STRING_TABLE_ADD                     0
#  define ASN1_F_ASN1_STRING_TO_BN                         0
#  define ASN1_F_ASN1_STRING_TYPE_NEW                      0
#  define ASN1_F_ASN1_TEMPLATE_EX_D2I                      0
#  define ASN1_F_ASN1_TEMPLATE_NEW                         0
#  define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I                   0
#  define ASN1_F_ASN1_TIME_ADJ                             0
#  define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING             0
#  define ASN1_F_ASN1_TYPE_GET_OCTETSTRING                 0
#  define ASN1_F_ASN1_UTCTIME_ADJ                          0
#  define ASN1_F_ASN1_VERIFY                               0
#  define ASN1_F_B64_READ_ASN1                             0
#  define ASN1_F_B64_WRITE_ASN1                            0
#  define ASN1_F_BIO_NEW_NDEF                              0
#  define ASN1_F_BITSTR_CB                                 0
#  define ASN1_F_BN_TO_ASN1_STRING                         0
#  define ASN1_F_C2I_ASN1_BIT_STRING                       0
#  define ASN1_F_C2I_ASN1_INTEGER                          0
#  define ASN1_F_C2I_ASN1_OBJECT                           0
#  define ASN1_F_C2I_IBUF                                  0
#  define ASN1_F_C2I_UINT64_INT                            0
#  define ASN1_F_COLLECT_DATA                              0
#  define ASN1_F_D2I_ASN1_OBJECT                           0
#  define ASN1_F_D2I_ASN1_UINTEGER                         0
#  define ASN1_F_D2I_AUTOPRIVATEKEY                        0
#  define ASN1_F_D2I_PRIVATEKEY                            0
#  define ASN1_F_D2I_PUBLICKEY                             0
#  define ASN1_F_DO_BUF                                    0
#  define ASN1_F_DO_CREATE                                 0
#  define ASN1_F_DO_DUMP                                   0
#  define ASN1_F_DO_TCREATE                                0
#  define ASN1_F_I2A_ASN1_OBJECT                           0
#  define ASN1_F_I2D_ASN1_BIO_STREAM                       0
#  define ASN1_F_I2D_ASN1_OBJECT                           0
#  define ASN1_F_I2D_DSA_PUBKEY                            0
#  define ASN1_F_I2D_EC_PUBKEY                             0
#  define ASN1_F_I2D_PRIVATEKEY                            0
#  define ASN1_F_I2D_PUBLICKEY                             0
#  define ASN1_F_I2D_RSA_PUBKEY                            0
#  define ASN1_F_LONG_C2I                                  0
#  define ASN1_F_NDEF_PREFIX                               0
#  define ASN1_F_NDEF_SUFFIX                               0
#  define ASN1_F_OID_MODULE_INIT                           0
#  define ASN1_F_PARSE_TAGGING                             0
#  define ASN1_F_PKCS5_PBE2_SET_IV                         0
#  define ASN1_F_PKCS5_PBE2_SET_SCRYPT                     0
#  define ASN1_F_PKCS5_PBE_SET                             0
#  define ASN1_F_PKCS5_PBE_SET0_ALGOR                      0
#  define ASN1_F_PKCS5_PBKDF2_SET                          0
#  define ASN1_F_PKCS5_SCRYPT_SET                          0
#  define ASN1_F_SMIME_READ_ASN1                           0
#  define ASN1_F_SMIME_TEXT                                0
#  define ASN1_F_STABLE_GET                                0
#  define ASN1_F_STBL_MODULE_INIT                          0
#  define ASN1_F_UINT32_C2I                                0
#  define ASN1_F_UINT32_NEW                                0
#  define ASN1_F_UINT64_C2I                                0
#  define ASN1_F_UINT64_NEW                                0
#  define ASN1_F_X509_CRL_ADD0_REVOKED                     0
#  define ASN1_F_X509_INFO_NEW                             0
#  define ASN1_F_X509_NAME_ENCODE                          0
#  define ASN1_F_X509_NAME_EX_D2I                          0
#  define ASN1_F_X509_NAME_EX_NEW                          0
#  define ASN1_F_X509_PKEY_NEW                             0

/*
 * ASYNC function codes.
 */
#  define ASYNC_F_ASYNC_CTX_NEW                            0
#  define ASYNC_F_ASYNC_INIT_THREAD                        0
#  define ASYNC_F_ASYNC_JOB_NEW                            0
#  define ASYNC_F_ASYNC_PAUSE_JOB                          0
#  define ASYNC_F_ASYNC_START_FUNC                         0
#  define ASYNC_F_ASYNC_START_JOB                          0
#  define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD               0

/*
 * BIO function codes.
 */
#  define BIO_F_ACPT_STATE                                 0
#  define BIO_F_ADDRINFO_WRAP                              0
#  define BIO_F_ADDR_STRINGS                               0
#  define BIO_F_BIO_ACCEPT                                 0
#  define BIO_F_BIO_ACCEPT_EX                              0
#  define BIO_F_BIO_ACCEPT_NEW                             0
#  define BIO_F_BIO_ADDR_NEW                               0
#  define BIO_F_BIO_BIND                                   0
#  define BIO_F_BIO_CALLBACK_CTRL                          0
#  define BIO_F_BIO_CONNECT                                0
#  define BIO_F_BIO_CONNECT_NEW                            0
#  define BIO_F_BIO_CTRL                                   0
#  define BIO_F_BIO_GETS                                   0
#  define BIO_F_BIO_GET_HOST_IP                            0
#  define BIO_F_BIO_GET_NEW_INDEX                          0
#  define BIO_F_BIO_GET_PORT                               0
#  define BIO_F_BIO_LISTEN                                 0
#  define BIO_F_BIO_LOOKUP                                 0
#  define BIO_F_BIO_LOOKUP_EX                              0
#  define BIO_F_BIO_MAKE_PAIR                              0
#  define BIO_F_BIO_METH_NEW                               0
#  define BIO_F_BIO_NEW                                    0
#  define BIO_F_BIO_NEW_DGRAM_SCTP                         0
#  define BIO_F_BIO_NEW_FILE                               0
#  define BIO_F_BIO_NEW_MEM_BUF                            0
#  define BIO_F_BIO_NREAD                                  0
#  define BIO_F_BIO_NREAD0                                 0
#  define BIO_F_BIO_NWRITE                                 0
#  define BIO_F_BIO_NWRITE0                                0
#  define BIO_F_BIO_PARSE_HOSTSERV                         0
#  define BIO_F_BIO_PUTS                                   0
#  define BIO_F_BIO_READ                                   0
#  define BIO_F_BIO_READ_EX                                0
#  define BIO_F_BIO_READ_INTERN                            0
#  define BIO_F_BIO_SOCKET                                 0
#  define BIO_F_BIO_SOCKET_NBIO                            0
#  define BIO_F_BIO_SOCK_INFO                              0
#  define BIO_F_BIO_SOCK_INIT                              0
#  define BIO_F_BIO_WRITE                                  0
#  define BIO_F_BIO_WRITE_EX                               0
#  define BIO_F_BIO_WRITE_INTERN                           0
#  define BIO_F_BUFFER_CTRL                                0
#  define BIO_F_CONN_CTRL                                  0
#  define BIO_F_CONN_STATE                                 0
#  define BIO_F_DGRAM_SCTP_NEW                             0
#  define BIO_F_DGRAM_SCTP_READ                            0
#  define BIO_F_DGRAM_SCTP_WRITE                           0
#  define BIO_F_DOAPR_OUTCH                                0
#  define BIO_F_FILE_CTRL                                  0
#  define BIO_F_FILE_READ                                  0
#  define BIO_F_LINEBUFFER_CTRL                            0
#  define BIO_F_LINEBUFFER_NEW                             0
#  define BIO_F_MEM_WRITE                                  0
#  define BIO_F_NBIOF_NEW                                  0
#  define BIO_F_SLG_WRITE                                  0
#  define BIO_F_SSL_NEW                                    0

/*
 * BN function codes.
 */
#  define BN_F_BNRAND                                      0
#  define BN_F_BNRAND_RANGE                                0
#  define BN_F_BN_BLINDING_CONVERT_EX                      0
#  define BN_F_BN_BLINDING_CREATE_PARAM                    0
#  define BN_F_BN_BLINDING_INVERT_EX                       0
#  define BN_F_BN_BLINDING_NEW                             0
#  define BN_F_BN_BLINDING_UPDATE                          0
#  define BN_F_BN_BN2DEC                                   0
#  define BN_F_BN_BN2HEX                                   0
#  define BN_F_BN_COMPUTE_WNAF                             0
#  define BN_F_BN_CTX_GET                                  0
#  define BN_F_BN_CTX_NEW                                  0
#  define BN_F_BN_CTX_START                                0
#  define BN_F_BN_DIV                                      0
#  define BN_F_BN_DIV_RECP                                 0
#  define BN_F_BN_EXP                                      0
#  define BN_F_BN_EXPAND_INTERNAL                          0
#  define BN_F_BN_GENCB_NEW                                0
#  define BN_F_BN_GENERATE_DSA_NONCE                       0
#  define BN_F_BN_GENERATE_PRIME_EX                        0
#  define BN_F_BN_GF2M_MOD                                 0
#  define BN_F_BN_GF2M_MOD_EXP                             0
#  define BN_F_BN_GF2M_MOD_MUL                             0
#  define BN_F_BN_GF2M_MOD_SOLVE_QUAD                      0
#  define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR                  0
#  define BN_F_BN_GF2M_MOD_SQR                             0
#  define BN_F_BN_GF2M_MOD_SQRT                            0
#  define BN_F_BN_LSHIFT                                   0
#  define BN_F_BN_MOD_EXP2_MONT                            0
#  define BN_F_BN_MOD_EXP_MONT                             0
#  define BN_F_BN_MOD_EXP_MONT_CONSTTIME                   0
#  define BN_F_BN_MOD_EXP_MONT_WORD                        0
#  define BN_F_BN_MOD_EXP_RECP                             0
#  define BN_F_BN_MOD_EXP_SIMPLE                           0
#  define BN_F_BN_MOD_INVERSE                              0
#  define BN_F_BN_MOD_INVERSE_NO_BRANCH                    0
#  define BN_F_BN_MOD_LSHIFT_QUICK                         0
#  define BN_F_BN_MOD_SQRT                                 0
#  define BN_F_BN_MONT_CTX_NEW                             0
#  define BN_F_BN_MPI2BN                                   0
#  define BN_F_BN_NEW                                      0
#  define BN_F_BN_POOL_GET                                 0
#  define BN_F_BN_RAND                                     0
#  define BN_F_BN_RAND_RANGE                               0
#  define BN_F_BN_RECP_CTX_NEW                             0
#  define BN_F_BN_RSHIFT                                   0
#  define BN_F_BN_SET_WORDS                                0
#  define BN_F_BN_STACK_PUSH                               0
#  define BN_F_BN_USUB                                     0

/*
 * BUF function codes.
 */
#  define BUF_F_BUF_MEM_GROW                               0
#  define BUF_F_BUF_MEM_GROW_CLEAN                         0
#  define BUF_F_BUF_MEM_NEW                                0

#  ifndef OPENSSL_NO_CMS
/*
 * CMS function codes.
 */
#   define CMS_F_CHECK_CONTENT                              0
#   define CMS_F_CMS_ADD0_CERT                              0
#   define CMS_F_CMS_ADD0_RECIPIENT_KEY                     0
#   define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD                0
#   define CMS_F_CMS_ADD1_RECEIPTREQUEST                    0
#   define CMS_F_CMS_ADD1_RECIPIENT_CERT                    0
#   define CMS_F_CMS_ADD1_SIGNER                            0
#   define CMS_F_CMS_ADD1_SIGNINGTIME                       0
#   define CMS_F_CMS_COMPRESS                               0
#   define CMS_F_CMS_COMPRESSEDDATA_CREATE                  0
#   define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO                0
#   define CMS_F_CMS_COPY_CONTENT                           0
#   define CMS_F_CMS_COPY_MESSAGEDIGEST                     0
#   define CMS_F_CMS_DATA                                   0
#   define CMS_F_CMS_DATAFINAL                              0
#   define CMS_F_CMS_DATAINIT                               0
#   define CMS_F_CMS_DECRYPT                                0
#   define CMS_F_CMS_DECRYPT_SET1_KEY                       0
#   define CMS_F_CMS_DECRYPT_SET1_PASSWORD                  0
#   define CMS_F_CMS_DECRYPT_SET1_PKEY                      0
#   define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX               0
#   define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO               0
#   define CMS_F_CMS_DIGESTEDDATA_DO_FINAL                  0
#   define CMS_F_CMS_DIGEST_VERIFY                          0
#   define CMS_F_CMS_ENCODE_RECEIPT                         0
#   define CMS_F_CMS_ENCRYPT                                0
#   define CMS_F_CMS_ENCRYPTEDCONTENT_INIT                  0
#   define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO              0
#   define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT                  0
#   define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT                  0
#   define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY                 0
#   define CMS_F_CMS_ENVELOPEDDATA_CREATE                   0
#   define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO                 0
#   define CMS_F_CMS_ENVELOPED_DATA_INIT                    0
#   define CMS_F_CMS_ENV_ASN1_CTRL                          0
#   define CMS_F_CMS_FINAL                                  0
#   define CMS_F_CMS_GET0_CERTIFICATE_CHOICES               0
#   define CMS_F_CMS_GET0_CONTENT                           0
#   define CMS_F_CMS_GET0_ECONTENT_TYPE                     0
#   define CMS_F_CMS_GET0_ENVELOPED                         0
#   define CMS_F_CMS_GET0_REVOCATION_CHOICES                0
#   define CMS_F_CMS_GET0_SIGNED                            0
#   define CMS_F_CMS_MSGSIGDIGEST_ADD1                      0
#   define CMS_F_CMS_RECEIPTREQUEST_CREATE0                 0
#   define CMS_F_CMS_RECEIPT_VERIFY                         0
#   define CMS_F_CMS_RECIPIENTINFO_DECRYPT                  0
#   define CMS_F_CMS_RECIPIENTINFO_ENCRYPT                  0
#   define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT             0
#   define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG            0
#   define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID        0
#   define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS           0
#   define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP         0
#   define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT            0
#   define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT            0
#   define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID            0
#   define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP             0
#   define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP            0
#   define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT             0
#   define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT             0
#   define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS           0
#   define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID      0
#   define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT               0
#   define CMS_F_CMS_RECIPIENTINFO_SET0_KEY                 0
#   define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD            0
#   define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY                0
#   define CMS_F_CMS_SD_ASN1_CTRL                           0
#   define CMS_F_CMS_SET1_IAS                               0
#   define CMS_F_CMS_SET1_KEYID                             0
#   define CMS_F_CMS_SET1_SIGNERIDENTIFIER                  0
#   define CMS_F_CMS_SET_DETACHED                           0
#   define CMS_F_CMS_SIGN                                   0
#   define CMS_F_CMS_SIGNED_DATA_INIT                       0
#   define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN                0
#   define CMS_F_CMS_SIGNERINFO_SIGN                        0
#   define CMS_F_CMS_SIGNERINFO_VERIFY                      0
#   define CMS_F_CMS_SIGNERINFO_VERIFY_CERT                 0
#   define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT              0
#   define CMS_F_CMS_SIGN_RECEIPT                           0
#   define CMS_F_CMS_SI_CHECK_ATTRIBUTES                    0
#   define CMS_F_CMS_STREAM                                 0
#   define CMS_F_CMS_UNCOMPRESS                             0
#   define CMS_F_CMS_VERIFY                                 0
#   define CMS_F_KEK_UNWRAP_KEY                             0
#  endif

#  ifndef OPENSSL_NO_COMP
/*
 * COMP function codes.
 */
#   define COMP_F_BIO_ZLIB_FLUSH                            0
#   define COMP_F_BIO_ZLIB_NEW                              0
#   define COMP_F_BIO_ZLIB_READ                             0
#   define COMP_F_BIO_ZLIB_WRITE                            0
#   define COMP_F_COMP_CTX_NEW                              0
#  endif

/*
 * CONF function codes.
 */
#  define CONF_F_CONF_DUMP_FP                              0
#  define CONF_F_CONF_LOAD                                 0
#  define CONF_F_CONF_LOAD_FP                              0
#  define CONF_F_CONF_PARSE_LIST                           0
#  define CONF_F_DEF_LOAD                                  0
#  define CONF_F_DEF_LOAD_BIO                              0
#  define CONF_F_GET_NEXT_FILE                             0
#  define CONF_F_MODULE_ADD                                0
#  define CONF_F_MODULE_INIT                               0
#  define CONF_F_MODULE_LOAD_DSO                           0
#  define CONF_F_MODULE_RUN                                0
#  define CONF_F_NCONF_DUMP_BIO                            0
#  define CONF_F_NCONF_DUMP_FP                             0
#  define CONF_F_NCONF_GET_NUMBER_E                        0
#  define CONF_F_NCONF_GET_SECTION                         0
#  define CONF_F_NCONF_GET_STRING                          0
#  define CONF_F_NCONF_LOAD                                0
#  define CONF_F_NCONF_LOAD_BIO                            0
#  define CONF_F_NCONF_LOAD_FP                             0
#  define CONF_F_NCONF_NEW                                 0
#  define CONF_F_PROCESS_INCLUDE                           0
#  define CONF_F_SSL_MODULE_INIT                           0
#  define CONF_F_STR_COPY                                  0

/*
 * CRYPTO function codes.
 */
#  define CRYPTO_F_CMAC_CTX_NEW                            0
#  define CRYPTO_F_CRYPTO_DUP_EX_DATA                      0
#  define CRYPTO_F_CRYPTO_FREE_EX_DATA                     0
#  define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX                 0
#  define CRYPTO_F_CRYPTO_MEMDUP                           0
#  define CRYPTO_F_CRYPTO_NEW_EX_DATA                      0
#  define CRYPTO_F_CRYPTO_OCB128_COPY_CTX                  0
#  define CRYPTO_F_CRYPTO_OCB128_INIT                      0
#  define CRYPTO_F_CRYPTO_SET_EX_DATA                      0
#  define CRYPTO_F_GET_AND_LOCK                            0
#  define CRYPTO_F_OPENSSL_ATEXIT                          0
#  define CRYPTO_F_OPENSSL_BUF2HEXSTR                      0
#  define CRYPTO_F_OPENSSL_FOPEN                           0
#  define CRYPTO_F_OPENSSL_HEXSTR2BUF                      0
#  define CRYPTO_F_OPENSSL_INIT_CRYPTO                     0
#  define CRYPTO_F_OPENSSL_LH_NEW                          0
#  define CRYPTO_F_OPENSSL_SK_DEEP_COPY                    0
#  define CRYPTO_F_OPENSSL_SK_DUP                          0
#  define CRYPTO_F_PKEY_HMAC_INIT                          0
#  define CRYPTO_F_PKEY_POLY1305_INIT                      0
#  define CRYPTO_F_PKEY_SIPHASH_INIT                       0
#  define CRYPTO_F_SK_RESERVE                              0

#  ifndef OPENSSL_NO_CT
/*
 * CT function codes.
 */
#   define CT_F_CTLOG_NEW                                   0
#   define CT_F_CTLOG_NEW_FROM_BASE64                       0
#   define CT_F_CTLOG_NEW_FROM_CONF                         0
#   define CT_F_CTLOG_STORE_LOAD_CTX_NEW                    0
#   define CT_F_CTLOG_STORE_LOAD_FILE                       0
#   define CT_F_CTLOG_STORE_LOAD_LOG                        0
#   define CT_F_CTLOG_STORE_NEW                             0
#   define CT_F_CT_BASE64_DECODE                            0
#   define CT_F_CT_POLICY_EVAL_CTX_NEW                      0
#   define CT_F_CT_V1_LOG_ID_FROM_PKEY                      0
#   define CT_F_I2O_SCT                                     0
#   define CT_F_I2O_SCT_LIST                                0
#   define CT_F_I2O_SCT_SIGNATURE                           0
#   define CT_F_O2I_SCT                                     0
#   define CT_F_O2I_SCT_LIST                                0
#   define CT_F_O2I_SCT_SIGNATURE                           0
#   define CT_F_SCT_CTX_NEW                                 0
#   define CT_F_SCT_CTX_VERIFY                              0
#   define CT_F_SCT_NEW                                     0
#   define CT_F_SCT_NEW_FROM_BASE64                         0
#   define CT_F_SCT_SET0_LOG_ID                             0
#   define CT_F_SCT_SET1_EXTENSIONS                         0
#   define CT_F_SCT_SET1_LOG_ID                             0
#   define CT_F_SCT_SET1_SIGNATURE                          0
#   define CT_F_SCT_SET_LOG_ENTRY_TYPE                      0
#   define CT_F_SCT_SET_SIGNATURE_NID                       0
#   define CT_F_SCT_SET_VERSION                             0
#  endif

#  ifndef OPENSSL_NO_DH
/*
 * DH function codes.
 */
#   define DH_F_COMPUTE_KEY                                 0
#   define DH_F_DHPARAMS_PRINT_FP                           0
#   define DH_F_DH_BUILTIN_GENPARAMS                        0
#   define DH_F_DH_CHECK_EX                                 0
#   define DH_F_DH_CHECK_PARAMS_EX                          0
#   define DH_F_DH_CHECK_PUB_KEY_EX                         0
#   define DH_F_DH_CMS_DECRYPT                              0
#   define DH_F_DH_CMS_SET_PEERKEY                          0
#   define DH_F_DH_CMS_SET_SHARED_INFO                      0
#   define DH_F_DH_METH_DUP                                 0
#   define DH_F_DH_METH_NEW                                 0
#   define DH_F_DH_METH_SET1_NAME                           0
#   define DH_F_DH_NEW_BY_NID                               0
#   define DH_F_DH_NEW_METHOD                               0
#   define DH_F_DH_PARAM_DECODE                             0
#   define DH_F_DH_PKEY_PUBLIC_CHECK                        0
#   define DH_F_DH_PRIV_DECODE                              0
#   define DH_F_DH_PRIV_ENCODE                              0
#   define DH_F_DH_PUB_DECODE                               0
#   define DH_F_DH_PUB_ENCODE                               0
#   define DH_F_DO_DH_PRINT                                 0
#   define DH_F_GENERATE_KEY                                0
#   define DH_F_PKEY_DH_CTRL_STR                            0
#   define DH_F_PKEY_DH_DERIVE                              0
#   define DH_F_PKEY_DH_INIT                                0
#   define DH_F_PKEY_DH_KEYGEN                              0
#  endif

#  ifndef OPENSSL_NO_DSA
/*
 * DSA function codes.
 */
#   define DSA_F_DSAPARAMS_PRINT                            0
#   define DSA_F_DSAPARAMS_PRINT_FP                         0
#   define DSA_F_DSA_BUILTIN_PARAMGEN                       0
#   define DSA_F_DSA_BUILTIN_PARAMGEN2                      0
#   define DSA_F_DSA_DO_SIGN                                0
#   define DSA_F_DSA_DO_VERIFY                              0
#   define DSA_F_DSA_METH_DUP                               0
#   define DSA_F_DSA_METH_NEW                               0
#   define DSA_F_DSA_METH_SET1_NAME                         0
#   define DSA_F_DSA_NEW_METHOD                             0
#   define DSA_F_DSA_PARAM_DECODE                           0
#   define DSA_F_DSA_PRINT_FP                               0
#   define DSA_F_DSA_PRIV_DECODE                            0
#   define DSA_F_DSA_PRIV_ENCODE                            0
#   define DSA_F_DSA_PUB_DECODE                             0
#   define DSA_F_DSA_PUB_ENCODE                             0
#   define DSA_F_DSA_SIGN                                   0
#   define DSA_F_DSA_SIGN_SETUP                             0
#   define DSA_F_DSA_SIG_NEW                                0
#   define DSA_F_OLD_DSA_PRIV_DECODE                        0
#   define DSA_F_PKEY_DSA_CTRL                              0
#   define DSA_F_PKEY_DSA_CTRL_STR                          0
#   define DSA_F_PKEY_DSA_KEYGEN                            0
#  endif

#  ifndef OPENSSL_NO_EC
/*
 * EC function codes.
 */
#   define EC_F_BN_TO_FELEM                                 0
#   define EC_F_D2I_ECPARAMETERS                            0
#   define EC_F_D2I_ECPKPARAMETERS                          0
#   define EC_F_D2I_ECPRIVATEKEY                            0
#   define EC_F_DO_EC_KEY_PRINT                             0
#   define EC_F_ECDH_CMS_DECRYPT                            0
#   define EC_F_ECDH_CMS_SET_SHARED_INFO                    0
#   define EC_F_ECDH_COMPUTE_KEY                            0
#   define EC_F_ECDH_SIMPLE_COMPUTE_KEY                     0
#   define EC_F_ECDSA_DO_SIGN_EX                            0
#   define EC_F_ECDSA_DO_VERIFY                             0
#   define EC_F_ECDSA_SIGN_EX                               0
#   define EC_F_ECDSA_SIGN_SETUP                            0
#   define EC_F_ECDSA_SIG_NEW                               0
#   define EC_F_ECDSA_VERIFY                                0
#   define EC_F_ECD_ITEM_VERIFY                             0
#   define EC_F_ECKEY_PARAM2TYPE                            0
#   define EC_F_ECKEY_PARAM_DECODE                          0
#   define EC_F_ECKEY_PRIV_DECODE                           0
#   define EC_F_ECKEY_PRIV_ENCODE                           0
#   define EC_F_ECKEY_PUB_DECODE                            0
#   define EC_F_ECKEY_PUB_ENCODE                            0
#   define EC_F_ECKEY_TYPE2PARAM                            0
#   define EC_F_ECPARAMETERS_PRINT                          0
#   define EC_F_ECPARAMETERS_PRINT_FP                       0
#   define EC_F_ECPKPARAMETERS_PRINT                        0
#   define EC_F_ECPKPARAMETERS_PRINT_FP                     0
#   define EC_F_ECP_NISTZ256_GET_AFFINE                     0
#   define EC_F_ECP_NISTZ256_INV_MOD_ORD                    0
#   define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE                0
#   define EC_F_ECP_NISTZ256_POINTS_MUL                     0
#   define EC_F_ECP_NISTZ256_PRE_COMP_NEW                   0
#   define EC_F_ECP_NISTZ256_WINDOWED_MUL                   0
#   define EC_F_ECX_KEY_OP                                  0
#   define EC_F_ECX_PRIV_ENCODE                             0
#   define EC_F_ECX_PUB_ENCODE                              0
#   define EC_F_EC_ASN1_GROUP2CURVE                         0
#   define EC_F_EC_ASN1_GROUP2FIELDID                       0
#   define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY           0
#   define EC_F_EC_GF2M_SIMPLE_FIELD_INV                    0
#   define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT     0
#   define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE              0
#   define EC_F_EC_GF2M_SIMPLE_LADDER_POST                  0
#   define EC_F_EC_GF2M_SIMPLE_LADDER_PRE                   0
#   define EC_F_EC_GF2M_SIMPLE_OCT2POINT                    0
#   define EC_F_EC_GF2M_SIMPLE_POINT2OCT                    0
#   define EC_F_EC_GF2M_SIMPLE_POINTS_MUL                   0
#   define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 0
#   define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 0
#   define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES   0
#   define EC_F_EC_GFP_MONT_FIELD_DECODE                    0
#   define EC_F_EC_GFP_MONT_FIELD_ENCODE                    0
#   define EC_F_EC_GFP_MONT_FIELD_INV                       0
#   define EC_F_EC_GFP_MONT_FIELD_MUL                       0
#   define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE                0
#   define EC_F_EC_GFP_MONT_FIELD_SQR                       0
#   define EC_F_EC_GFP_MONT_GROUP_SET_CURVE                 0
#   define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE             0
#   define EC_F_EC_GFP_NISTP224_POINTS_MUL                  0
#   define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 0
#   define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE             0
#   define EC_F_EC_GFP_NISTP256_POINTS_MUL                  0
#   define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 0
#   define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE             0
#   define EC_F_EC_GFP_NISTP521_POINTS_MUL                  0
#   define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 0
#   define EC_F_EC_GFP_NIST_FIELD_MUL                       0
#   define EC_F_EC_GFP_NIST_FIELD_SQR                       0
#   define EC_F_EC_GFP_NIST_GROUP_SET_CURVE                 0
#   define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES             0
#   define EC_F_EC_GFP_SIMPLE_FIELD_INV                     0
#   define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT      0
#   define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE               0
#   define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE                   0
#   define EC_F_EC_GFP_SIMPLE_OCT2POINT                     0
#   define EC_F_EC_GFP_SIMPLE_POINT2OCT                     0
#   define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE            0
#   define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES  0
#   define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES  0
#   define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES    0
#   define EC_F_EC_GROUP_CHECK                              0
#   define EC_F_EC_GROUP_CHECK_DISCRIMINANT                 0
#   define EC_F_EC_GROUP_COPY                               0
#   define EC_F_EC_GROUP_GET_CURVE                          0
#   define EC_F_EC_GROUP_GET_CURVE_GF2M                     0
#   define EC_F_EC_GROUP_GET_CURVE_GFP                      0
#   define EC_F_EC_GROUP_GET_DEGREE                         0
#   define EC_F_EC_GROUP_GET_ECPARAMETERS                   0
#   define EC_F_EC_GROUP_GET_ECPKPARAMETERS                 0
#   define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS              0
#   define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS                0
#   define EC_F_EC_GROUP_NEW                                0
#   define EC_F_EC_GROUP_NEW_BY_CURVE_NAME                  0
#   define EC_F_EC_GROUP_NEW_FROM_DATA                      0
#   define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS              0
#   define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS            0
#   define EC_F_EC_GROUP_SET_CURVE                          0
#   define EC_F_EC_GROUP_SET_CURVE_GF2M                     0
#   define EC_F_EC_GROUP_SET_CURVE_GFP                      0
#   define EC_F_EC_GROUP_SET_GENERATOR                      0
#   define EC_F_EC_GROUP_SET_SEED                           0
#   define EC_F_EC_KEY_CHECK_KEY                            0
#   define EC_F_EC_KEY_COPY                                 0
#   define EC_F_EC_KEY_GENERATE_KEY                         0
#   define EC_F_EC_KEY_NEW                                  0
#   define EC_F_EC_KEY_NEW_METHOD                           0
#   define EC_F_EC_KEY_OCT2PRIV                             0
#   define EC_F_EC_KEY_PRINT                                0
#   define EC_F_EC_KEY_PRINT_FP                             0
#   define EC_F_EC_KEY_PRIV2BUF                             0
#   define EC_F_EC_KEY_PRIV2OCT                             0
#   define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES    0
#   define EC_F_EC_KEY_SIMPLE_CHECK_KEY                     0
#   define EC_F_EC_KEY_SIMPLE_OCT2PRIV                      0
#   define EC_F_EC_KEY_SIMPLE_PRIV2OCT                      0
#   define EC_F_EC_PKEY_CHECK                               0
#   define EC_F_EC_PKEY_PARAM_CHECK                         0
#   define EC_F_EC_POINTS_MAKE_AFFINE                       0
#   define EC_F_EC_POINTS_MUL                               0
#   define EC_F_EC_POINT_ADD                                0
#   define EC_F_EC_POINT_BN2POINT                           0
#   define EC_F_EC_POINT_CMP                                0
#   define EC_F_EC_POINT_COPY                               0
#   define EC_F_EC_POINT_DBL                                0
#   define EC_F_EC_POINT_GET_AFFINE_COORDINATES             0
#   define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M        0
#   define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP         0
#   define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP    0
#   define EC_F_EC_POINT_INVERT                             0
#   define EC_F_EC_POINT_IS_AT_INFINITY                     0
#   define EC_F_EC_POINT_IS_ON_CURVE                        0
#   define EC_F_EC_POINT_MAKE_AFFINE                        0
#   define EC_F_EC_POINT_NEW                                0
#   define EC_F_EC_POINT_OCT2POINT                          0
#   define EC_F_EC_POINT_POINT2BUF                          0
#   define EC_F_EC_POINT_POINT2OCT                          0
#   define EC_F_EC_POINT_SET_AFFINE_COORDINATES             0
#   define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M        0
#   define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP         0
#   define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES         0
#   define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M    0
#   define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP     0
#   define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP    0
#   define EC_F_EC_POINT_SET_TO_INFINITY                    0
#   define EC_F_EC_PRE_COMP_NEW                             0
#   define EC_F_EC_SCALAR_MUL_LADDER                        0
#   define EC_F_EC_WNAF_MUL                                 0
#   define EC_F_EC_WNAF_PRECOMPUTE_MULT                     0
#   define EC_F_I2D_ECPARAMETERS                            0
#   define EC_F_I2D_ECPKPARAMETERS                          0
#   define EC_F_I2D_ECPRIVATEKEY                            0
#   define EC_F_I2O_ECPUBLICKEY                             0
#   define EC_F_NISTP224_PRE_COMP_NEW                       0
#   define EC_F_NISTP256_PRE_COMP_NEW                       0
#   define EC_F_NISTP521_PRE_COMP_NEW                       0
#   define EC_F_O2I_ECPUBLICKEY                             0
#   define EC_F_OLD_EC_PRIV_DECODE                          0
#   define EC_F_OSSL_ECDH_COMPUTE_KEY                       0
#   define EC_F_OSSL_ECDSA_SIGN_SIG                         0
#   define EC_F_OSSL_ECDSA_VERIFY_SIG                       0
#   define EC_F_PKEY_ECD_CTRL                               0
#   define EC_F_PKEY_ECD_DIGESTSIGN                         0
#   define EC_F_PKEY_ECD_DIGESTSIGN25519                    0
#   define EC_F_PKEY_ECD_DIGESTSIGN448                      0
#   define EC_F_PKEY_ECX_DERIVE                             0
#   define EC_F_PKEY_EC_CTRL                                0
#   define EC_F_PKEY_EC_CTRL_STR                            0
#   define EC_F_PKEY_EC_DERIVE                              0
#   define EC_F_PKEY_EC_INIT                                0
#   define EC_F_PKEY_EC_KDF_DERIVE                          0
#   define EC_F_PKEY_EC_KEYGEN                              0
#   define EC_F_PKEY_EC_PARAMGEN                            0
#   define EC_F_PKEY_EC_SIGN                                0
#   define EC_F_VALIDATE_ECX_DERIVE                         0
#  endif

#  ifndef OPENSSL_NO_ENGINE
/*
 * ENGINE function codes.
 */
#   define ENGINE_F_DIGEST_UPDATE                           0
#   define ENGINE_F_DYNAMIC_CTRL                            0
#   define ENGINE_F_DYNAMIC_GET_DATA_CTX                    0
#   define ENGINE_F_DYNAMIC_LOAD                            0
#   define ENGINE_F_DYNAMIC_SET_DATA_CTX                    0
#   define ENGINE_F_ENGINE_ADD                              0
#   define ENGINE_F_ENGINE_BY_ID                            0
#   define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE                0
#   define ENGINE_F_ENGINE_CTRL                             0
#   define ENGINE_F_ENGINE_CTRL_CMD                         0
#   define ENGINE_F_ENGINE_CTRL_CMD_STRING                  0
#   define ENGINE_F_ENGINE_FINISH                           0
#   define ENGINE_F_ENGINE_GET_CIPHER                       0
#   define ENGINE_F_ENGINE_GET_DIGEST                       0
#   define ENGINE_F_ENGINE_GET_FIRST                        0
#   define ENGINE_F_ENGINE_GET_LAST                         0
#   define ENGINE_F_ENGINE_GET_NEXT                         0
#   define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH               0
#   define ENGINE_F_ENGINE_GET_PKEY_METH                    0
#   define ENGINE_F_ENGINE_GET_PREV                         0
#   define ENGINE_F_ENGINE_INIT                             0
#   define ENGINE_F_ENGINE_LIST_ADD                         0
#   define ENGINE_F_ENGINE_LIST_REMOVE                      0
#   define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY                 0
#   define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY                  0
#   define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT             0
#   define ENGINE_F_ENGINE_NEW                              0
#   define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR               0
#   define ENGINE_F_ENGINE_REMOVE                           0
#   define ENGINE_F_ENGINE_SET_DEFAULT_STRING               0
#   define ENGINE_F_ENGINE_SET_ID                           0
#   define ENGINE_F_ENGINE_SET_NAME                         0
#   define ENGINE_F_ENGINE_TABLE_REGISTER                   0
#   define ENGINE_F_ENGINE_UNLOCKED_FINISH                  0
#   define ENGINE_F_ENGINE_UP_REF                           0
#   define ENGINE_F_INT_CLEANUP_ITEM                        0
#   define ENGINE_F_INT_CTRL_HELPER                         0
#   define ENGINE_F_INT_ENGINE_CONFIGURE                    0
#   define ENGINE_F_INT_ENGINE_MODULE_INIT                  0
#   define ENGINE_F_OSSL_HMAC_INIT                          0
#  endif

/*
 * EVP function codes.
 */
#  define EVP_F_AESNI_INIT_KEY                             0
#  define EVP_F_AESNI_XTS_INIT_KEY                         0
#  define EVP_F_AES_GCM_CTRL                               0
#  define EVP_F_AES_INIT_KEY                               0
#  define EVP_F_AES_OCB_CIPHER                             0
#  define EVP_F_AES_T4_INIT_KEY                            0
#  define EVP_F_AES_T4_XTS_INIT_KEY                        0
#  define EVP_F_AES_WRAP_CIPHER                            0
#  define EVP_F_AES_XTS_INIT_KEY                           0
#  define EVP_F_ALG_MODULE_INIT                            0
#  define EVP_F_ARIA_CCM_INIT_KEY                          0
#  define EVP_F_ARIA_GCM_CTRL                              0
#  define EVP_F_ARIA_GCM_INIT_KEY                          0
#  define EVP_F_ARIA_INIT_KEY                              0
#  define EVP_F_B64_NEW                                    0
#  define EVP_F_CAMELLIA_INIT_KEY                          0
#  define EVP_F_CHACHA20_POLY1305_CTRL                     0
#  define EVP_F_CMLL_T4_INIT_KEY                           0
#  define EVP_F_DES_EDE3_WRAP_CIPHER                       0
#  define EVP_F_DO_SIGVER_INIT                             0
#  define EVP_F_ENC_NEW                                    0
#  define EVP_F_EVP_CIPHERINIT_EX                          0
#  define EVP_F_EVP_CIPHER_ASN1_TO_PARAM                   0
#  define EVP_F_EVP_CIPHER_CTX_COPY                        0
#  define EVP_F_EVP_CIPHER_CTX_CTRL                        0
#  define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH              0
#  define EVP_F_EVP_CIPHER_PARAM_TO_ASN1                   0
#  define EVP_F_EVP_DECRYPTFINAL_EX                        0
#  define EVP_F_EVP_DECRYPTUPDATE                          0
#  define EVP_F_EVP_DIGESTFINALXOF                         0
#  define EVP_F_EVP_DIGESTINIT_EX                          0
#  define EVP_F_EVP_ENCRYPTDECRYPTUPDATE                   0
#  define EVP_F_EVP_ENCRYPTFINAL_EX                        0
#  define EVP_F_EVP_ENCRYPTUPDATE                          0
#  define EVP_F_EVP_MD_CTX_COPY_EX                         0
#  define EVP_F_EVP_MD_SIZE                                0
#  define EVP_F_EVP_OPENINIT                               0
#  define EVP_F_EVP_PBE_ALG_ADD                            0
#  define EVP_F_EVP_PBE_ALG_ADD_TYPE                       0
#  define EVP_F_EVP_PBE_CIPHERINIT                         0
#  define EVP_F_EVP_PBE_SCRYPT                             0
#  define EVP_F_EVP_PKCS82PKEY                             0
#  define EVP_F_EVP_PKEY2PKCS8                             0
#  define EVP_F_EVP_PKEY_ASN1_ADD0                         0
#  define EVP_F_EVP_PKEY_CHECK                             0
#  define EVP_F_EVP_PKEY_COPY_PARAMETERS                   0
#  define EVP_F_EVP_PKEY_CTX_CTRL                          0
#  define EVP_F_EVP_PKEY_CTX_CTRL_STR                      0
#  define EVP_F_EVP_PKEY_CTX_DUP                           0
#  define EVP_F_EVP_PKEY_CTX_MD                            0
#  define EVP_F_EVP_PKEY_DECRYPT                           0
#  define EVP_F_EVP_PKEY_DECRYPT_INIT                      0
#  define EVP_F_EVP_PKEY_DECRYPT_OLD                       0
#  define EVP_F_EVP_PKEY_DERIVE                            0
#  define EVP_F_EVP_PKEY_DERIVE_INIT                       0
#  define EVP_F_EVP_PKEY_DERIVE_SET_PEER                   0
#  define EVP_F_EVP_PKEY_ENCRYPT                           0
#  define EVP_F_EVP_PKEY_ENCRYPT_INIT                      0
#  define EVP_F_EVP_PKEY_ENCRYPT_OLD                       0
#  define EVP_F_EVP_PKEY_GET0_DH                           0
#  define EVP_F_EVP_PKEY_GET0_DSA                          0
#  define EVP_F_EVP_PKEY_GET0_EC_KEY                       0
#  define EVP_F_EVP_PKEY_GET0_HMAC                         0
#  define EVP_F_EVP_PKEY_GET0_POLY1305                     0
#  define EVP_F_EVP_PKEY_GET0_RSA                          0
#  define EVP_F_EVP_PKEY_GET0_SIPHASH                      0
#  define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY               0
#  define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY                0
#  define EVP_F_EVP_PKEY_KEYGEN                            0
#  define EVP_F_EVP_PKEY_KEYGEN_INIT                       0
#  define EVP_F_EVP_PKEY_METH_ADD0                         0
#  define EVP_F_EVP_PKEY_METH_NEW                          0
#  define EVP_F_EVP_PKEY_NEW                               0
#  define EVP_F_EVP_PKEY_NEW_CMAC_KEY                      0
#  define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY               0
#  define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY                0
#  define EVP_F_EVP_PKEY_PARAMGEN                          0
#  define EVP_F_EVP_PKEY_PARAMGEN_INIT                     0
#  define EVP_F_EVP_PKEY_PARAM_CHECK                       0
#  define EVP_F_EVP_PKEY_PUBLIC_CHECK                      0
#  define EVP_F_EVP_PKEY_SET1_ENGINE                       0
#  define EVP_F_EVP_PKEY_SET_ALIAS_TYPE                    0
#  define EVP_F_EVP_PKEY_SIGN                              0
#  define EVP_F_EVP_PKEY_SIGN_INIT                         0
#  define EVP_F_EVP_PKEY_VERIFY                            0
#  define EVP_F_EVP_PKEY_VERIFY_INIT                       0
#  define EVP_F_EVP_PKEY_VERIFY_RECOVER                    0
#  define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT               0
#  define EVP_F_EVP_SIGNFINAL                              0
#  define EVP_F_EVP_VERIFYFINAL                            0
#  define EVP_F_INT_CTX_NEW                                0
#  define EVP_F_OK_NEW                                     0
#  define EVP_F_PKCS5_PBE_KEYIVGEN                         0
#  define EVP_F_PKCS5_V2_PBE_KEYIVGEN                      0
#  define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN                   0
#  define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN                   0
#  define EVP_F_PKEY_SET_TYPE                              0
#  define EVP_F_RC2_MAGIC_TO_METH                          0
#  define EVP_F_RC5_CTRL                                   0
#  define EVP_F_R_32_12_16_INIT_KEY                        0
#  define EVP_F_S390X_AES_GCM_CTRL                         0
#  define EVP_F_UPDATE                                     0

/*
 * KDF function codes.
 */
#  define KDF_F_PKEY_HKDF_CTRL_STR                         0
#  define KDF_F_PKEY_HKDF_DERIVE                           0
#  define KDF_F_PKEY_HKDF_INIT                             0
#  define KDF_F_PKEY_SCRYPT_CTRL_STR                       0
#  define KDF_F_PKEY_SCRYPT_CTRL_UINT64                    0
#  define KDF_F_PKEY_SCRYPT_DERIVE                         0
#  define KDF_F_PKEY_SCRYPT_INIT                           0
#  define KDF_F_PKEY_SCRYPT_SET_MEMBUF                     0
#  define KDF_F_PKEY_TLS1_PRF_CTRL_STR                     0
#  define KDF_F_PKEY_TLS1_PRF_DERIVE                       0
#  define KDF_F_PKEY_TLS1_PRF_INIT                         0
#  define KDF_F_TLS1_PRF_ALG                               0

/*
 * KDF reason codes.
 */
#  define KDF_R_INVALID_DIGEST                             0
#  define KDF_R_MISSING_ITERATION_COUNT                    0
#  define KDF_R_MISSING_KEY                                0
#  define KDF_R_MISSING_MESSAGE_DIGEST                     0
#  define KDF_R_MISSING_PARAMETER                          0
#  define KDF_R_MISSING_PASS                               0
#  define KDF_R_MISSING_SALT                               0
#  define KDF_R_MISSING_SECRET                             0
#  define KDF_R_MISSING_SEED                               0
#  define KDF_R_UNKNOWN_PARAMETER_TYPE                     0
#  define KDF_R_VALUE_ERROR                                0
#  define KDF_R_VALUE_MISSING                              0

/*
 * OBJ function codes.
 */
#  define OBJ_F_OBJ_ADD_OBJECT                             0
#  define OBJ_F_OBJ_ADD_SIGID                              0
#  define OBJ_F_OBJ_CREATE                                 0
#  define OBJ_F_OBJ_DUP                                    0
#  define OBJ_F_OBJ_NAME_NEW_INDEX                         0
#  define OBJ_F_OBJ_NID2LN                                 0
#  define OBJ_F_OBJ_NID2OBJ                                0
#  define OBJ_F_OBJ_NID2SN                                 0
#  define OBJ_F_OBJ_TXT2OBJ                                0

#  ifndef OPENSSL_NO_OCSP
/*
 * OCSP function codes.
 */
#   define OCSP_F_D2I_OCSP_NONCE                            0
#   define OCSP_F_OCSP_BASIC_ADD1_STATUS                    0
#   define OCSP_F_OCSP_BASIC_SIGN                           0
#   define OCSP_F_OCSP_BASIC_SIGN_CTX                       0
#   define OCSP_F_OCSP_BASIC_VERIFY                         0
#   define OCSP_F_OCSP_CERT_ID_NEW                          0
#   define OCSP_F_OCSP_CHECK_DELEGATED                      0
#   define OCSP_F_OCSP_CHECK_IDS                            0
#   define OCSP_F_OCSP_CHECK_ISSUER                         0
#   define OCSP_F_OCSP_CHECK_VALIDITY                       0
#   define OCSP_F_OCSP_MATCH_ISSUERID                       0
#   define OCSP_F_OCSP_PARSE_URL                            0
#   define OCSP_F_OCSP_REQUEST_SIGN                         0
#   define OCSP_F_OCSP_REQUEST_VERIFY                       0
#   define OCSP_F_OCSP_RESPONSE_GET1_BASIC                  0
#   define OCSP_F_PARSE_HTTP_LINE1                          0
#  endif

/*
 * PEM function codes.
 */
#  define PEM_F_B2I_DSS                                    0
#  define PEM_F_B2I_PVK_BIO                                0
#  define PEM_F_B2I_RSA                                    0
#  define PEM_F_CHECK_BITLEN_DSA                           0
#  define PEM_F_CHECK_BITLEN_RSA                           0
#  define PEM_F_D2I_PKCS8PRIVATEKEY_BIO                    0
#  define PEM_F_D2I_PKCS8PRIVATEKEY_FP                     0
#  define PEM_F_DO_B2I                                     0
#  define PEM_F_DO_B2I_BIO                                 0
#  define PEM_F_DO_BLOB_HEADER                             0
#  define PEM_F_DO_I2B                                     0
#  define PEM_F_DO_PK8PKEY                                 0
#  define PEM_F_DO_PK8PKEY_FP                              0
#  define PEM_F_DO_PVK_BODY                                0
#  define PEM_F_DO_PVK_HEADER                              0
#  define PEM_F_GET_HEADER_AND_DATA                        0
#  define PEM_F_GET_NAME                                   0
#  define PEM_F_I2B_PVK                                    0
#  define PEM_F_I2B_PVK_BIO                                0
#  define PEM_F_LOAD_IV                                    0
#  define PEM_F_PEM_ASN1_READ                              0
#  define PEM_F_PEM_ASN1_READ_BIO                          0
#  define PEM_F_PEM_ASN1_WRITE                             0
#  define PEM_F_PEM_ASN1_WRITE_BIO                         0
#  define PEM_F_PEM_DEF_CALLBACK                           0
#  define PEM_F_PEM_DO_HEADER                              0
#  define PEM_F_PEM_GET_EVP_CIPHER_INFO                    0
#  define PEM_F_PEM_READ                                   0
#  define PEM_F_PEM_READ_BIO                               0
#  define PEM_F_PEM_READ_BIO_DHPARAMS                      0
#  define PEM_F_PEM_READ_BIO_EX                            0
#  define PEM_F_PEM_READ_BIO_PARAMETERS                    0
#  define PEM_F_PEM_READ_BIO_PRIVATEKEY                    0
#  define PEM_F_PEM_READ_DHPARAMS                          0
#  define PEM_F_PEM_READ_PRIVATEKEY                        0
#  define PEM_F_PEM_SIGNFINAL                              0
#  define PEM_F_PEM_WRITE                                  0
#  define PEM_F_PEM_WRITE_BIO                              0
#  define PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL       0
#  define PEM_F_PEM_WRITE_PRIVATEKEY                       0
#  define PEM_F_PEM_X509_INFO_READ                         0
#  define PEM_F_PEM_X509_INFO_READ_BIO                     0
#  define PEM_F_PEM_X509_INFO_WRITE_BIO                    0

/*
 * PKCS12 function codes.
 */
#  define PKCS12_F_OPENSSL_ASC2UNI                         0
#  define PKCS12_F_OPENSSL_UNI2ASC                         0
#  define PKCS12_F_OPENSSL_UNI2UTF8                        0
#  define PKCS12_F_OPENSSL_UTF82UNI                        0
#  define PKCS12_F_PKCS12_CREATE                           0
#  define PKCS12_F_PKCS12_GEN_MAC                          0
#  define PKCS12_F_PKCS12_INIT                             0
#  define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I                 0
#  define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT                 0
#  define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG                0
#  define PKCS12_F_PKCS12_KEY_GEN_ASC                      0
#  define PKCS12_F_PKCS12_KEY_GEN_UNI                      0
#  define PKCS12_F_PKCS12_KEY_GEN_UTF8                     0
#  define PKCS12_F_PKCS12_NEWPASS                          0
#  define PKCS12_F_PKCS12_PACK_P7DATA                      0
#  define PKCS12_F_PKCS12_PACK_P7ENCDATA                   0
#  define PKCS12_F_PKCS12_PARSE                            0
#  define PKCS12_F_PKCS12_PBE_CRYPT                        0
#  define PKCS12_F_PKCS12_PBE_KEYIVGEN                     0
#  define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF            0
#  define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8            0
#  define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT     0
#  define PKCS12_F_PKCS12_SETUP_MAC                        0
#  define PKCS12_F_PKCS12_SET_MAC                          0
#  define PKCS12_F_PKCS12_UNPACK_AUTHSAFES                 0
#  define PKCS12_F_PKCS12_UNPACK_P7DATA                    0
#  define PKCS12_F_PKCS12_VERIFY_MAC                       0
#  define PKCS12_F_PKCS8_ENCRYPT                           0
#  define PKCS12_F_PKCS8_SET0_PBE                          0

/*
 * PKCS7 function codes.
 */
#  define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB                   0
#  define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME           0
#  define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP                0
#  define PKCS7_F_PKCS7_ADD_CERTIFICATE                    0
#  define PKCS7_F_PKCS7_ADD_CRL                            0
#  define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO                 0
#  define PKCS7_F_PKCS7_ADD_SIGNATURE                      0
#  define PKCS7_F_PKCS7_ADD_SIGNER                         0
#  define PKCS7_F_PKCS7_BIO_ADD_DIGEST                     0
#  define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST               0
#  define PKCS7_F_PKCS7_CTRL                               0
#  define PKCS7_F_PKCS7_DATADECODE                         0
#  define PKCS7_F_PKCS7_DATAFINAL                          0
#  define PKCS7_F_PKCS7_DATAINIT                           0
#  define PKCS7_F_PKCS7_DATAVERIFY                         0
#  define PKCS7_F_PKCS7_DECRYPT                            0
#  define PKCS7_F_PKCS7_DECRYPT_RINFO                      0
#  define PKCS7_F_PKCS7_ENCODE_RINFO                       0
#  define PKCS7_F_PKCS7_ENCRYPT                            0
#  define PKCS7_F_PKCS7_FINAL                              0
#  define PKCS7_F_PKCS7_FIND_DIGEST                        0
#  define PKCS7_F_PKCS7_GET0_SIGNERS                       0
#  define PKCS7_F_PKCS7_RECIP_INFO_SET                     0
#  define PKCS7_F_PKCS7_SET_CIPHER                         0
#  define PKCS7_F_PKCS7_SET_CONTENT                        0
#  define PKCS7_F_PKCS7_SET_DIGEST                         0
#  define PKCS7_F_PKCS7_SET_TYPE                           0
#  define PKCS7_F_PKCS7_SIGN                               0
#  define PKCS7_F_PKCS7_SIGNATUREVERIFY                    0
#  define PKCS7_F_PKCS7_SIGNER_INFO_SET                    0
#  define PKCS7_F_PKCS7_SIGNER_INFO_SIGN                   0
#  define PKCS7_F_PKCS7_SIGN_ADD_SIGNER                    0
#  define PKCS7_F_PKCS7_SIMPLE_SMIMECAP                    0
#  define PKCS7_F_PKCS7_VERIFY                             0

/*
 * RAND function codes.
 */
#  define RAND_F_DATA_COLLECT_METHOD                       0
#  define RAND_F_DRBG_BYTES                                0
#  define RAND_F_DRBG_GET_ENTROPY                          0
#  define RAND_F_DRBG_SETUP                                0
#  define RAND_F_GET_ENTROPY                               0
#  define RAND_F_RAND_BYTES                                0
#  define RAND_F_RAND_DRBG_ENABLE_LOCKING                  0
#  define RAND_F_RAND_DRBG_GENERATE                        0
#  define RAND_F_RAND_DRBG_GET_ENTROPY                     0
#  define RAND_F_RAND_DRBG_GET_NONCE                       0
#  define RAND_F_RAND_DRBG_INSTANTIATE                     0
#  define RAND_F_RAND_DRBG_NEW                             0
#  define RAND_F_RAND_DRBG_RESEED                          0
#  define RAND_F_RAND_DRBG_RESTART                         0
#  define RAND_F_RAND_DRBG_SET                             0
#  define RAND_F_RAND_DRBG_SET_DEFAULTS                    0
#  define RAND_F_RAND_DRBG_UNINSTANTIATE                   0
#  define RAND_F_RAND_LOAD_FILE                            0
#  define RAND_F_RAND_POOL_ACQUIRE_ENTROPY                 0
#  define RAND_F_RAND_POOL_ADD                             0
#  define RAND_F_RAND_POOL_ADD_BEGIN                       0
#  define RAND_F_RAND_POOL_ADD_END                         0
#  define RAND_F_RAND_POOL_ATTACH                          0
#  define RAND_F_RAND_POOL_BYTES_NEEDED                    0
#  define RAND_F_RAND_POOL_GROW                            0
#  define RAND_F_RAND_POOL_NEW                             0
#  define RAND_F_RAND_PSEUDO_BYTES                         0
#  define RAND_F_RAND_WRITE_FILE                           0

/*
 * RSA function codes.
 */
#  define RSA_F_CHECK_PADDING_MD                           0
#  define RSA_F_ENCODE_PKCS1                               0
#  define RSA_F_INT_RSA_VERIFY                             0
#  define RSA_F_OLD_RSA_PRIV_DECODE                        0
#  define RSA_F_PKEY_PSS_INIT                              0
#  define RSA_F_PKEY_RSA_CTRL                              0
#  define RSA_F_PKEY_RSA_CTRL_STR                          0
#  define RSA_F_PKEY_RSA_SIGN                              0
#  define RSA_F_PKEY_RSA_VERIFY                            0
#  define RSA_F_PKEY_RSA_VERIFYRECOVER                     0
#  define RSA_F_RSA_ALGOR_TO_MD                            0
#  define RSA_F_RSA_BUILTIN_KEYGEN                         0
#  define RSA_F_RSA_CHECK_KEY                              0
#  define RSA_F_RSA_CHECK_KEY_EX                           0
#  define RSA_F_RSA_CMS_DECRYPT                            0
#  define RSA_F_RSA_CMS_VERIFY                             0
#  define RSA_F_RSA_ITEM_VERIFY                            0
#  define RSA_F_RSA_METH_DUP                               0
#  define RSA_F_RSA_METH_NEW                               0
#  define RSA_F_RSA_METH_SET1_NAME                         0
#  define RSA_F_RSA_MGF1_TO_MD                             0
#  define RSA_F_RSA_MULTIP_INFO_NEW                        0
#  define RSA_F_RSA_NEW_METHOD                             0
#  define RSA_F_RSA_NULL                                   0
#  define RSA_F_RSA_NULL_PRIVATE_DECRYPT                   0
#  define RSA_F_RSA_NULL_PRIVATE_ENCRYPT                   0
#  define RSA_F_RSA_NULL_PUBLIC_DECRYPT                    0
#  define RSA_F_RSA_NULL_PUBLIC_ENCRYPT                    0
#  define RSA_F_RSA_OSSL_PRIVATE_DECRYPT                   0
#  define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT                   0
#  define RSA_F_RSA_OSSL_PUBLIC_DECRYPT                    0
#  define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT                    0
#  define RSA_F_RSA_PADDING_ADD_NONE                       0
#  define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP                 0
#  define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1            0
#  define RSA_F_RSA_PADDING_ADD_PKCS1_PSS                  0
#  define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1             0
#  define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1               0
#  define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2               0
#  define RSA_F_RSA_PADDING_ADD_SSLV23                     0
#  define RSA_F_RSA_PADDING_ADD_X931                       0
#  define RSA_F_RSA_PADDING_CHECK_NONE                     0
#  define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP               0
#  define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1          0
#  define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1             0
#  define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2             0
#  define RSA_F_RSA_PADDING_CHECK_SSLV23                   0
#  define RSA_F_RSA_PADDING_CHECK_X931                     0
#  define RSA_F_RSA_PARAM_DECODE                           0
#  define RSA_F_RSA_PRINT                                  0
#  define RSA_F_RSA_PRINT_FP                               0
#  define RSA_F_RSA_PRIV_DECODE                            0
#  define RSA_F_RSA_PRIV_ENCODE                            0
#  define RSA_F_RSA_PSS_GET_PARAM                          0
#  define RSA_F_RSA_PSS_TO_CTX                             0
#  define RSA_F_RSA_PUB_DECODE                             0
#  define RSA_F_RSA_SETUP_BLINDING                         0
#  define RSA_F_RSA_SIGN                                   0
#  define RSA_F_RSA_SIGN_ASN1_OCTET_STRING                 0
#  define RSA_F_RSA_VERIFY                                 0
#  define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING               0
#  define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1                  0
#  define RSA_F_SETUP_TBUF                                 0

/*
 * OSSL_STORE function codes.
 */
#  define OSSL_STORE_F_FILE_CTRL                           0
#  define OSSL_STORE_F_FILE_FIND                           0
#  define OSSL_STORE_F_FILE_GET_PASS                       0
#  define OSSL_STORE_F_FILE_LOAD                           0
#  define OSSL_STORE_F_FILE_LOAD_TRY_DECODE                0
#  define OSSL_STORE_F_FILE_NAME_TO_URI                    0
#  define OSSL_STORE_F_FILE_OPEN                           0
#  define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO           0
#  define OSSL_STORE_F_OSSL_STORE_EXPECT                   0
#  define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT  0
#  define OSSL_STORE_F_OSSL_STORE_FIND                     0
#  define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT          0
#  define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT           0
#  define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL            0
#  define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME           0
#  define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 0
#  define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS         0
#  define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY           0
#  define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT            0
#  define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL             0
#  define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED        0
#  define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME            0
#  define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS          0
#  define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY            0
#  define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 0
#  define OSSL_STORE_F_OSSL_STORE_INIT_ONCE                0
#  define OSSL_STORE_F_OSSL_STORE_LOADER_NEW               0
#  define OSSL_STORE_F_OSSL_STORE_OPEN                     0
#  define OSSL_STORE_F_OSSL_STORE_OPEN_INT                 0
#  define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT      0
#  define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS          0
#  define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL  0
#  define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 0
#  define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME           0
#  define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT    0
#  define OSSL_STORE_F_TRY_DECODE_PARAMS                   0
#  define OSSL_STORE_F_TRY_DECODE_PKCS12                   0
#  define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED           0

#  ifndef OPENSSL_NO_TS
/*
 * TS function codes.
 */
#   define TS_F_DEF_SERIAL_CB                               0
#   define TS_F_DEF_TIME_CB                                 0
#   define TS_F_ESS_ADD_SIGNING_CERT                        0
#   define TS_F_ESS_ADD_SIGNING_CERT_V2                     0
#   define TS_F_ESS_CERT_ID_NEW_INIT                        0
#   define TS_F_ESS_CERT_ID_V2_NEW_INIT                     0
#   define TS_F_ESS_SIGNING_CERT_NEW_INIT                   0
#   define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT                0
#   define TS_F_INT_TS_RESP_VERIFY_TOKEN                    0
#   define TS_F_PKCS7_TO_TS_TST_INFO                        0
#   define TS_F_TS_ACCURACY_SET_MICROS                      0
#   define TS_F_TS_ACCURACY_SET_MILLIS                      0
#   define TS_F_TS_ACCURACY_SET_SECONDS                     0
#   define TS_F_TS_CHECK_IMPRINTS                           0
#   define TS_F_TS_CHECK_NONCES                             0
#   define TS_F_TS_CHECK_POLICY                             0
#   define TS_F_TS_CHECK_SIGNING_CERTS                      0
#   define TS_F_TS_CHECK_STATUS_INFO                        0
#   define TS_F_TS_COMPUTE_IMPRINT                          0
#   define TS_F_TS_CONF_INVALID                             0
#   define TS_F_TS_CONF_LOAD_CERT                           0
#   define TS_F_TS_CONF_LOAD_CERTS                          0
#   define TS_F_TS_CONF_LOAD_KEY                            0
#   define TS_F_TS_CONF_LOOKUP_FAIL                         0
#   define TS_F_TS_CONF_SET_DEFAULT_ENGINE                  0
#   define TS_F_TS_GET_STATUS_TEXT                          0
#   define TS_F_TS_MSG_IMPRINT_SET_ALGO                     0
#   define TS_F_TS_REQ_SET_MSG_IMPRINT                      0
#   define TS_F_TS_REQ_SET_NONCE                            0
#   define TS_F_TS_REQ_SET_POLICY_ID                        0
#   define TS_F_TS_RESP_CREATE_RESPONSE                     0
#   define TS_F_TS_RESP_CREATE_TST_INFO                     0
#   define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO                0
#   define TS_F_TS_RESP_CTX_ADD_MD                          0
#   define TS_F_TS_RESP_CTX_ADD_POLICY                      0
#   define TS_F_TS_RESP_CTX_NEW                             0
#   define TS_F_TS_RESP_CTX_SET_ACCURACY                    0
#   define TS_F_TS_RESP_CTX_SET_CERTS                       0
#   define TS_F_TS_RESP_CTX_SET_DEF_POLICY                  0
#   define TS_F_TS_RESP_CTX_SET_SIGNER_CERT                 0
#   define TS_F_TS_RESP_CTX_SET_STATUS_INFO                 0
#   define TS_F_TS_RESP_GET_POLICY                          0
#   define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION          0
#   define TS_F_TS_RESP_SET_STATUS_INFO                     0
#   define TS_F_TS_RESP_SET_TST_INFO                        0
#   define TS_F_TS_RESP_SIGN                                0
#   define TS_F_TS_RESP_VERIFY_SIGNATURE                    0
#   define TS_F_TS_TST_INFO_SET_ACCURACY                    0
#   define TS_F_TS_TST_INFO_SET_MSG_IMPRINT                 0
#   define TS_F_TS_TST_INFO_SET_NONCE                       0
#   define TS_F_TS_TST_INFO_SET_POLICY_ID                   0
#   define TS_F_TS_TST_INFO_SET_SERIAL                      0
#   define TS_F_TS_TST_INFO_SET_TIME                        0
#   define TS_F_TS_TST_INFO_SET_TSA                         0
#   define TS_F_TS_VERIFY                                   0
#   define TS_F_TS_VERIFY_CERT                              0
#   define TS_F_TS_VERIFY_CTX_NEW                           0
#  endif

/*
 * UI function codes.
 */
#  define UI_F_CLOSE_CONSOLE                               0
#  define UI_F_ECHO_CONSOLE                                0
#  define UI_F_GENERAL_ALLOCATE_BOOLEAN                    0
#  define UI_F_GENERAL_ALLOCATE_PROMPT                     0
#  define UI_F_NOECHO_CONSOLE                              0
#  define UI_F_OPEN_CONSOLE                                0
#  define UI_F_UI_CONSTRUCT_PROMPT                         0
#  define UI_F_UI_CREATE_METHOD                            0
#  define UI_F_UI_CTRL                                     0
#  define UI_F_UI_DUP_ERROR_STRING                         0
#  define UI_F_UI_DUP_INFO_STRING                          0
#  define UI_F_UI_DUP_INPUT_BOOLEAN                        0
#  define UI_F_UI_DUP_INPUT_STRING                         0
#  define UI_F_UI_DUP_USER_DATA                            0
#  define UI_F_UI_DUP_VERIFY_STRING                        0
#  define UI_F_UI_GET0_RESULT                              0
#  define UI_F_UI_GET_RESULT_LENGTH                        0
#  define UI_F_UI_NEW_METHOD                               0
#  define UI_F_UI_PROCESS                                  0
#  define UI_F_UI_SET_RESULT                               0
#  define UI_F_UI_SET_RESULT_EX                            0

/*
 * X509 function codes.
 */
#  define X509_F_ADD_CERT_DIR                              0
#  define X509_F_BUILD_CHAIN                               0
#  define X509_F_BY_FILE_CTRL                              0
#  define X509_F_CHECK_NAME_CONSTRAINTS                    0
#  define X509_F_CHECK_POLICY                              0
#  define X509_F_DANE_I2D                                  0
#  define X509_F_DIR_CTRL                                  0
#  define X509_F_GET_CERT_BY_SUBJECT                       0
#  define X509_F_I2D_X509_AUX                              0
#  define X509_F_LOOKUP_CERTS_SK                           0
#  define X509_F_NETSCAPE_SPKI_B64_DECODE                  0
#  define X509_F_NETSCAPE_SPKI_B64_ENCODE                  0
#  define X509_F_NEW_DIR                                   0
#  define X509_F_X509AT_ADD1_ATTR                          0
#  define X509_F_X509V3_ADD_EXT                            0
#  define X509_F_X509_ATTRIBUTE_CREATE_BY_NID              0
#  define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ              0
#  define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT              0
#  define X509_F_X509_ATTRIBUTE_GET0_DATA                  0
#  define X509_F_X509_ATTRIBUTE_SET1_DATA                  0
#  define X509_F_X509_CHECK_PRIVATE_KEY                    0
#  define X509_F_X509_CRL_DIFF                             0
#  define X509_F_X509_CRL_METHOD_NEW                       0
#  define X509_F_X509_CRL_PRINT_FP                         0
#  define X509_F_X509_EXTENSION_CREATE_BY_NID              0
#  define X509_F_X509_EXTENSION_CREATE_BY_OBJ              0
#  define X509_F_X509_GET_PUBKEY_PARAMETERS                0
#  define X509_F_X509_LOAD_CERT_CRL_FILE                   0
#  define X509_F_X509_LOAD_CERT_FILE                       0
#  define X509_F_X509_LOAD_CRL_FILE                        0
#  define X509_F_X509_LOOKUP_METH_NEW                      0
#  define X509_F_X509_LOOKUP_NEW                           0
#  define X509_F_X509_NAME_ADD_ENTRY                       0
#  define X509_F_X509_NAME_CANON                           0
#  define X509_F_X509_NAME_ENTRY_CREATE_BY_NID             0
#  define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT             0
#  define X509_F_X509_NAME_ENTRY_SET_OBJECT                0
#  define X509_F_X509_NAME_ONELINE                         0
#  define X509_F_X509_NAME_PRINT                           0
#  define X509_F_X509_OBJECT_NEW                           0
#  define X509_F_X509_PRINT_EX_FP                          0
#  define X509_F_X509_PUBKEY_DECODE                        0
#  define X509_F_X509_PUBKEY_GET                           0
#  define X509_F_X509_PUBKEY_GET0                          0
#  define X509_F_X509_PUBKEY_SET                           0
#  define X509_F_X509_REQ_CHECK_PRIVATE_KEY                0
#  define X509_F_X509_REQ_PRINT_EX                         0
#  define X509_F_X509_REQ_PRINT_FP                         0
#  define X509_F_X509_REQ_TO_X509                          0
#  define X509_F_X509_STORE_ADD_CERT                       0
#  define X509_F_X509_STORE_ADD_CRL                        0
#  define X509_F_X509_STORE_ADD_LOOKUP                     0
#  define X509_F_X509_STORE_CTX_GET1_ISSUER                0
#  define X509_F_X509_STORE_CTX_INIT                       0
#  define X509_F_X509_STORE_CTX_NEW                        0
#  define X509_F_X509_STORE_CTX_PURPOSE_INHERIT            0
#  define X509_F_X509_STORE_NEW                            0
#  define X509_F_X509_TO_X509_REQ                          0
#  define X509_F_X509_TRUST_ADD                            0
#  define X509_F_X509_TRUST_SET                            0
#  define X509_F_X509_VERIFY_CERT                          0
#  define X509_F_X509_VERIFY_PARAM_NEW                     0

/*
 * X509V3 function codes.
 */
#  define X509V3_F_A2I_GENERAL_NAME                        0
#  define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL             0
#  define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE             0
#  define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL         0
#  define X509V3_F_BIGNUM_TO_STRING                        0
#  define X509V3_F_COPY_EMAIL                              0
#  define X509V3_F_COPY_ISSUER                             0
#  define X509V3_F_DO_DIRNAME                              0
#  define X509V3_F_DO_EXT_I2D                              0
#  define X509V3_F_DO_EXT_NCONF                            0
#  define X509V3_F_GNAMES_FROM_SECTNAME                    0
#  define X509V3_F_I2S_ASN1_ENUMERATED                     0
#  define X509V3_F_I2S_ASN1_IA5STRING                      0
#  define X509V3_F_I2S_ASN1_INTEGER                        0
#  define X509V3_F_I2V_AUTHORITY_INFO_ACCESS               0
#  define X509V3_F_LEVEL_ADD_NODE                          0
#  define X509V3_F_NOTICE_SECTION                          0
#  define X509V3_F_NREF_NOS                                0
#  define X509V3_F_POLICY_CACHE_CREATE                     0
#  define X509V3_F_POLICY_CACHE_NEW                        0
#  define X509V3_F_POLICY_DATA_NEW                         0
#  define X509V3_F_POLICY_SECTION                          0
#  define X509V3_F_PROCESS_PCI_VALUE                       0
#  define X509V3_F_R2I_CERTPOL                             0
#  define X509V3_F_R2I_PCI                                 0
#  define X509V3_F_S2I_ASN1_IA5STRING                      0
#  define X509V3_F_S2I_ASN1_INTEGER                        0
#  define X509V3_F_S2I_ASN1_OCTET_STRING                   0
#  define X509V3_F_S2I_SKEY_ID                             0
#  define X509V3_F_SET_DIST_POINT_NAME                     0
#  define X509V3_F_SXNET_ADD_ID_ASC                        0
#  define X509V3_F_SXNET_ADD_ID_INTEGER                    0
#  define X509V3_F_SXNET_ADD_ID_ULONG                      0
#  define X509V3_F_SXNET_GET_ID_ASC                        0
#  define X509V3_F_SXNET_GET_ID_ULONG                      0
#  define X509V3_F_TREE_INIT                               0
#  define X509V3_F_V2I_ASIDENTIFIERS                       0
#  define X509V3_F_V2I_ASN1_BIT_STRING                     0
#  define X509V3_F_V2I_AUTHORITY_INFO_ACCESS               0
#  define X509V3_F_V2I_AUTHORITY_KEYID                     0
#  define X509V3_F_V2I_BASIC_CONSTRAINTS                   0
#  define X509V3_F_V2I_CRLD                                0
#  define X509V3_F_V2I_EXTENDED_KEY_USAGE                  0
#  define X509V3_F_V2I_GENERAL_NAMES                       0
#  define X509V3_F_V2I_GENERAL_NAME_EX                     0
#  define X509V3_F_V2I_IDP                                 0
#  define X509V3_F_V2I_IPADDRBLOCKS                        0
#  define X509V3_F_V2I_ISSUER_ALT                          0
#  define X509V3_F_V2I_NAME_CONSTRAINTS                    0
#  define X509V3_F_V2I_POLICY_CONSTRAINTS                  0
#  define X509V3_F_V2I_POLICY_MAPPINGS                     0
#  define X509V3_F_V2I_SUBJECT_ALT                         0
#  define X509V3_F_V2I_TLS_FEATURE                         0
#  define X509V3_F_V3_GENERIC_EXTENSION                    0
#  define X509V3_F_X509V3_ADD1_I2D                         0
#  define X509V3_F_X509V3_ADD_VALUE                        0
#  define X509V3_F_X509V3_EXT_ADD                          0
#  define X509V3_F_X509V3_EXT_ADD_ALIAS                    0
#  define X509V3_F_X509V3_EXT_I2D                          0
#  define X509V3_F_X509V3_EXT_NCONF                        0
#  define X509V3_F_X509V3_GET_SECTION                      0
#  define X509V3_F_X509V3_GET_STRING                       0
#  define X509V3_F_X509V3_GET_VALUE_BOOL                   0
#  define X509V3_F_X509V3_PARSE_LIST                       0
#  define X509V3_F_X509_PURPOSE_ADD                        0
#  define X509V3_F_X509_PURPOSE_SET                        0

/*
 * Compatibility defines.
 */
# define EVP_R_OPERATON_NOT_INITIALIZED    EVP_R_OPERATION_NOT_INITIALIZED

# endif

# ifdef  __cplusplus
}
# endif
#endif
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    /*
 * WARNING: do not edit!
 * Generated by Makefile from include/openssl/x509.h.in
 *
 * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */



#ifndef OPENSSL_X509_H
# define OPENSSL_X509_H
# pragma once

# include <openssl/macros.h>
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define HEADER_X509_H
# endif

# include <openssl/e_os2.h>
# include <openssl/types.h>
# include <openssl/symhacks.h>
# include <openssl/buffer.h>
# include <openssl/evp.h>
# include <openssl/bio.h>
# include <openssl/asn1.h>
# include <openssl/safestack.h>
# include <openssl/ec.h>

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  include <openssl/rsa.h>
#  include <openssl/dsa.h>
#  include <openssl/dh.h>
# endif

# include <openssl/sha.h>
# include <openssl/x509err.h>

#ifdef  __cplusplus
extern "C" {
#endif

/* Needed stacks for types defined in other headers */
SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME)
#define sk_X509_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_value(sk, idx) ((X509_NAME *)OPENSSL_sk_value(ossl_check_const_X509_NAME_sk_type(sk), (idx)))
#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp)))
#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n)))
#define sk_X509_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_sk_type(sk), (n))
#define sk_X509_NAME_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_delete(sk, i) ((X509_NAME *)OPENSSL_sk_delete(ossl_check_X509_NAME_sk_type(sk), (i)))
#define sk_X509_NAME_delete_ptr(sk, ptr) ((X509_NAME *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_pop(sk) ((X509_NAME *)OPENSSL_sk_pop(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_shift(sk) ((X509_NAME *)OPENSSL_sk_shift(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk),ossl_check_X509_NAME_freefunc_type(freefunc))
#define sk_X509_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), (idx))
#define sk_X509_NAME_set(sk, idx, ptr) ((X509_NAME *)OPENSSL_sk_set(ossl_check_X509_NAME_sk_type(sk), (idx), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), pnum)
#define sk_X509_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_dup(sk) ((STACK_OF(X509_NAME) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_sk_type(sk), ossl_check_X509_NAME_copyfunc_type(copyfunc), ossl_check_X509_NAME_freefunc_type(freefunc)))
#define sk_X509_NAME_set_cmp_func(sk, cmp) ((sk_X509_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509)
#define sk_X509_num(sk) OPENSSL_sk_num(ossl_check_const_X509_sk_type(sk))
#define sk_X509_value(sk, idx) ((X509 *)OPENSSL_sk_value(ossl_check_const_X509_sk_type(sk), (idx)))
#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp)))
#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_new_null())
#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n)))
#define sk_X509_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_sk_type(sk), (n))
#define sk_X509_free(sk) OPENSSL_sk_free(ossl_check_X509_sk_type(sk))
#define sk_X509_zero(sk) OPENSSL_sk_zero(ossl_check_X509_sk_type(sk))
#define sk_X509_delete(sk, i) ((X509 *)OPENSSL_sk_delete(ossl_check_X509_sk_type(sk), (i)))
#define sk_X509_delete_ptr(sk, ptr) ((X509 *)OPENSSL_sk_delete_ptr(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)))
#define sk_X509_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_pop(sk) ((X509 *)OPENSSL_sk_pop(ossl_check_X509_sk_type(sk)))
#define sk_X509_shift(sk) ((X509 *)OPENSSL_sk_shift(ossl_check_X509_sk_type(sk)))
#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk),ossl_check_X509_freefunc_type(freefunc))
#define sk_X509_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), (idx))
#define sk_X509_set(sk, idx, ptr) ((X509 *)OPENSSL_sk_set(ossl_check_X509_sk_type(sk), (idx), ossl_check_X509_type(ptr)))
#define sk_X509_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), pnum)
#define sk_X509_sort(sk) OPENSSL_sk_sort(ossl_check_X509_sk_type(sk))
#define sk_X509_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_sk_type(sk))
#define sk_X509_dup(sk) ((STACK_OF(X509) *)OPENSSL_sk_dup(ossl_check_const_X509_sk_type(sk)))
#define sk_X509_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_sk_type(sk), ossl_check_X509_copyfunc_type(copyfunc), ossl_check_X509_freefunc_type(freefunc)))
#define sk_X509_set_cmp_func(sk, cmp) ((sk_X509_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_sk_type(sk), ossl_check_X509_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED)
#define sk_X509_REVOKED_num(sk) OPENSSL_sk_num(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_value(sk, idx) ((X509_REVOKED *)OPENSSL_sk_value(ossl_check_const_X509_REVOKED_sk_type(sk), (idx)))
#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp)))
#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_null())
#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n)))
#define sk_X509_REVOKED_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_REVOKED_sk_type(sk), (n))
#define sk_X509_REVOKED_free(sk) OPENSSL_sk_free(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_zero(sk) OPENSSL_sk_zero(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_delete(sk, i) ((X509_REVOKED *)OPENSSL_sk_delete(ossl_check_X509_REVOKED_sk_type(sk), (i)))
#define sk_X509_REVOKED_delete_ptr(sk, ptr) ((X509_REVOKED *)OPENSSL_sk_delete_ptr(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_pop(sk) ((X509_REVOKED *)OPENSSL_sk_pop(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_shift(sk) ((X509_REVOKED *)OPENSSL_sk_shift(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk),ossl_check_X509_REVOKED_freefunc_type(freefunc))
#define sk_X509_REVOKED_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), (idx))
#define sk_X509_REVOKED_set(sk, idx, ptr) ((X509_REVOKED *)OPENSSL_sk_set(ossl_check_X509_REVOKED_sk_type(sk), (idx), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), pnum)
#define sk_X509_REVOKED_sort(sk) OPENSSL_sk_sort(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_dup(sk) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_dup(ossl_check_const_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_copyfunc_type(copyfunc), ossl_check_X509_REVOKED_freefunc_type(freefunc)))
#define sk_X509_REVOKED_set_cmp_func(sk, cmp) ((sk_X509_REVOKED_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL)
#define sk_X509_CRL_num(sk) OPENSSL_sk_num(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_value(sk, idx) ((X509_CRL *)OPENSSL_sk_value(ossl_check_const_X509_CRL_sk_type(sk), (idx)))
#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp)))
#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_null())
#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n)))
#define sk_X509_CRL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_CRL_sk_type(sk), (n))
#define sk_X509_CRL_free(sk) OPENSSL_sk_free(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_zero(sk) OPENSSL_sk_zero(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_delete(sk, i) ((X509_CRL *)OPENSSL_sk_delete(ossl_check_X509_CRL_sk_type(sk), (i)))
#define sk_X509_CRL_delete_ptr(sk, ptr) ((X509_CRL *)OPENSSL_sk_delete_ptr(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_pop(sk) ((X509_CRL *)OPENSSL_sk_pop(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_shift(sk) ((X509_CRL *)OPENSSL_sk_shift(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk),ossl_check_X509_CRL_freefunc_type(freefunc))
#define sk_X509_CRL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), (idx))
#define sk_X509_CRL_set(sk, idx, ptr) ((X509_CRL *)OPENSSL_sk_set(ossl_check_X509_CRL_sk_type(sk), (idx), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), pnum)
#define sk_X509_CRL_sort(sk) OPENSSL_sk_sort(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_dup(sk) ((STACK_OF(X509_CRL) *)OPENSSL_sk_dup(ossl_check_const_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_CRL) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_CRL_sk_type(sk), ossl_check_X509_CRL_copyfunc_type(copyfunc), ossl_check_X509_CRL_freefunc_type(freefunc)))
#define sk_X509_CRL_set_cmp_func(sk, cmp) ((sk_X509_CRL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_compfunc_type(cmp)))


/* Flags for X509_get_signature_info() */
/* Signature info is valid */
# define X509_SIG_INFO_VALID     0x1
/* Signature is suitable for TLS use */
# define X509_SIG_INFO_TLS       0x2

# define X509_FILETYPE_PEM       1
# define X509_FILETYPE_ASN1      2
# define X509_FILETYPE_DEFAULT   3

# define X509v3_KU_DIGITAL_SIGNATURE     0x0080
# define X509v3_KU_NON_REPUDIATION       0x0040
# define X509v3_KU_KEY_ENCIPHERMENT      0x0020
# define X509v3_KU_DATA_ENCIPHERMENT     0x0010
# define X509v3_KU_KEY_AGREEMENT         0x0008
# define X509v3_KU_KEY_CERT_SIGN         0x0004
# define X509v3_KU_CRL_SIGN              0x0002
# define X509v3_KU_ENCIPHER_ONLY         0x0001
# define X509v3_KU_DECIPHER_ONLY         0x8000
# define X509v3_KU_UNDEF                 0xffff

struct X509_algor_st {
    ASN1_OBJECT *algorithm;
    ASN1_TYPE *parameter;
} /* X509_ALGOR */ ;

typedef STACK_OF(X509_ALGOR) X509_ALGORS;

typedef struct X509_val_st {
    ASN1_TIME *notBefore;
    ASN1_TIME *notAfter;
} X509_VAL;

typedef struct X509_sig_st X509_SIG;

typedef struct X509_name_entry_st X509_NAME_ENTRY;

SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY)
#define sk_X509_NAME_ENTRY_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_value(sk, idx) ((X509_NAME_ENTRY *)OPENSSL_sk_value(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), (idx)))
#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))
#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n)))
#define sk_X509_NAME_ENTRY_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_ENTRY_sk_type(sk), (n))
#define sk_X509_NAME_ENTRY_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_delete(sk, i) ((X509_NAME_ENTRY *)OPENSSL_sk_delete(ossl_check_X509_NAME_ENTRY_sk_type(sk), (i)))
#define sk_X509_NAME_ENTRY_delete_ptr(sk, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_pop(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_pop(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_shift(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_shift(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk),ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc))
#define sk_X509_NAME_ENTRY_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), (idx))
#define sk_X509_NAME_ENTRY_set(sk, idx, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_set(ossl_check_X509_NAME_ENTRY_sk_type(sk), (idx), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), pnum)
#define sk_X509_NAME_ENTRY_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_dup(sk) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_copyfunc_type(copyfunc), ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)))
#define sk_X509_NAME_ENTRY_set_cmp_func(sk, cmp) ((sk_X509_NAME_ENTRY_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))


# define X509_EX_V_NETSCAPE_HACK         0x8000
# define X509_EX_V_INIT                  0x0001
typedef struct X509_extension_st X509_EXTENSION;
SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION)
#define sk_X509_EXTENSION_num(sk) OPENSSL_sk_num(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_value(sk, idx) ((X509_EXTENSION *)OPENSSL_sk_value(ossl_check_const_X509_EXTENSION_sk_type(sk), (idx)))
#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp)))
#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_null())
#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n)))
#define sk_X509_EXTENSION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_EXTENSION_sk_type(sk), (n))
#define sk_X509_EXTENSION_free(sk) OPENSSL_sk_free(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_zero(sk) OPENSSL_sk_zero(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_delete(sk, i) ((X509_EXTENSION *)OPENSSL_sk_delete(ossl_check_X509_EXTENSION_sk_type(sk), (i)))
#define sk_X509_EXTENSION_delete_ptr(sk, ptr) ((X509_EXTENSION *)OPENSSL_sk_delete_ptr(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_pop(sk) ((X509_EXTENSION *)OPENSSL_sk_pop(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_shift(sk) ((X509_EXTENSION *)OPENSSL_sk_shift(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk),ossl_check_X509_EXTENSION_freefunc_type(freefunc))
#define sk_X509_EXTENSION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), (idx))
#define sk_X509_EXTENSION_set(sk, idx, ptr) ((X509_EXTENSION *)OPENSSL_sk_set(ossl_check_X509_EXTENSION_sk_type(sk), (idx), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), pnum)
#define sk_X509_EXTENSION_sort(sk) OPENSSL_sk_sort(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_dup(sk) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_dup(ossl_check_const_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_copyfunc_type(copyfunc), ossl_check_X509_EXTENSION_freefunc_type(freefunc)))
#define sk_X509_EXTENSION_set_cmp_func(sk, cmp) ((sk_X509_EXTENSION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_compfunc_type(cmp)))

typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS;
typedef struct x509_attributes_st X509_ATTRIBUTE;
SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE)
#define sk_X509_ATTRIBUTE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_value(sk, idx) ((X509_ATTRIBUTE *)OPENSSL_sk_value(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), (idx)))
#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))
#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_null())
#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n)))
#define sk_X509_ATTRIBUTE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ATTRIBUTE_sk_type(sk), (n))
#define sk_X509_ATTRIBUTE_free(sk) OPENSSL_sk_free(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_delete(sk, i) ((X509_ATTRIBUTE *)OPENSSL_sk_delete(ossl_check_X509_ATTRIBUTE_sk_type(sk), (i)))
#define sk_X509_ATTRIBUTE_delete_ptr(sk, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_delete_ptr(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_pop(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_pop(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_shift(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_shift(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk),ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc))
#define sk_X509_ATTRIBUTE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), (idx))
#define sk_X509_ATTRIBUTE_set(sk, idx, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_set(ossl_check_X509_ATTRIBUTE_sk_type(sk), (idx), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), pnum)
#define sk_X509_ATTRIBUTE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_dup(sk) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_dup(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_copyfunc_type(copyfunc), ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)))
#define sk_X509_ATTRIBUTE_set_cmp_func(sk, cmp) ((sk_X509_ATTRIBUTE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))

typedef struct X509_req_info_st X509_REQ_INFO;
typedef struct X509_req_st X509_REQ;
typedef struct x509_cert_aux_st X509_CERT_AUX;
typedef struct x509_cinf_st X509_CINF;

/* Flags for X509_print_ex() */

# define X509_FLAG_COMPAT                0
# define X509_FLAG_NO_HEADER             1L
# define X509_FLAG_NO_VERSION            (1L << 1)
# define X509_FLAG_NO_SERIAL             (1L << 2)
# define X509_FLAG_NO_SIGNAME            (1L << 3)
# define X509_FLAG_NO_ISSUER             (1L << 4)
# define X509_FLAG_NO_VALIDITY           (1L << 5)
# define X509_FLAG_NO_SUBJECT            (1L << 6)
# define X509_FLAG_NO_PUBKEY             (1L << 7)
# define X509_FLAG_NO_EXTENSIONS         (1L << 8)
# define X509_FLAG_NO_SIGDUMP            (1L << 9)
# define X509_FLAG_NO_AUX                (1L << 10)
# define X509_FLAG_NO_ATTRIBUTES         (1L << 11)
# define X509_FLAG_NO_IDS                (1L << 12)
# define X509_FLAG_EXTENSIONS_ONLY_KID   (1L << 13)

/* Flags specific to X509_NAME_print_ex() */

/* The field separator information */

# define XN_FLAG_SEP_MASK        (0xf << 16)

# define XN_FLAG_COMPAT          0/* Traditional; use old X509_NAME_print */
# define XN_FLAG_SEP_COMMA_PLUS  (1 << 16)/* RFC2253 ,+ */
# define XN_FLAG_SEP_CPLUS_SPC   (2 << 16)/* ,+ spaced: more readable */
# define XN_FLAG_SEP_SPLUS_SPC   (3 << 16)/* ;+ spaced */
# define XN_FLAG_SEP_MULTILINE   (4 << 16)/* One line per field */

# define XN_FLAG_DN_REV          (1 << 20)/* Reverse DN order */

/* How the field name is shown */

# define XN_FLAG_FN_MASK         (0x3 << 21)

# define XN_FLAG_FN_SN           0/* Object short name */
# define XN_FLAG_FN_LN           (1 << 21)/* Object long name */
# define XN_FLAG_FN_OID          (2 << 21)/* Always use OIDs */
# define XN_FLAG_FN_NONE         (3 << 21)/* No field names */

# define XN_FLAG_SPC_EQ          (1 << 23)/* Put spaces round '=' */

/*
 * This determines if we dump fields we don't recognise: RFC2253 requires
 * this.
 */

# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24)

# define XN_FLAG_FN_ALIGN        (1 << 25)/* Align field names to 20
                                           * characters */

/* Complete set of RFC2253 flags */

# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \
                        XN_FLAG_SEP_COMMA_PLUS | \
                        XN_FLAG_DN_REV | \
                        XN_FLAG_FN_SN | \
                        XN_FLAG_DUMP_UNKNOWN_FIELDS)

/* readable oneline form */

# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \
                        ASN1_STRFLGS_ESC_QUOTE | \
                        XN_FLAG_SEP_CPLUS_SPC | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_SN)

/* readable multiline form */

# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \
                        ASN1_STRFLGS_ESC_MSB | \
                        XN_FLAG_SEP_MULTILINE | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_LN | \
                        XN_FLAG_FN_ALIGN)

typedef struct X509_crl_info_st X509_CRL_INFO;

typedef struct private_key_st {
    int version;
    /* The PKCS#8 data types */
    X509_ALGOR *enc_algor;
    ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */
    /* When decrypted, the following will not be NULL */
    EVP_PKEY *dec_pkey;
    /* used to encrypt and decrypt */
    int key_length;
    char *key_data;
    int key_free;               /* true if we should auto free key_data */
    /* expanded version of 'enc_algor' */
    EVP_CIPHER_INFO cipher;
} X509_PKEY;

typedef struct X509_info_st {
    X509 *x509;
    X509_CRL *crl;
    X509_PKEY *x_pkey;
    EVP_CIPHER_INFO enc_cipher;
    int enc_len;
    char *enc_data;
} X509_INFO;
SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO)
#define sk_X509_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_value(sk, idx) ((X509_INFO *)OPENSSL_sk_value(ossl_check_const_X509_INFO_sk_type(sk), (idx)))
#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp)))
#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_null())
#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n)))
#define sk_X509_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_INFO_sk_type(sk), (n))
#define sk_X509_INFO_free(sk) OPENSSL_sk_free(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_delete(sk, i) ((X509_INFO *)OPENSSL_sk_delete(ossl_check_X509_INFO_sk_type(sk), (i)))
#define sk_X509_INFO_delete_ptr(sk, ptr) ((X509_INFO *)OPENSSL_sk_delete_ptr(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_pop(sk) ((X509_INFO *)OPENSSL_sk_pop(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_shift(sk) ((X509_INFO *)OPENSSL_sk_shift(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk),ossl_check_X509_INFO_freefunc_type(freefunc))
#define sk_X509_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), (idx))
#define sk_X509_INFO_set(sk, idx, ptr) ((X509_INFO *)OPENSSL_sk_set(ossl_check_X509_INFO_sk_type(sk), (idx), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), pnum)
#define sk_X509_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_dup(sk) ((STACK_OF(X509_INFO) *)OPENSSL_sk_dup(ossl_check_const_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_INFO_sk_type(sk), ossl_check_X509_INFO_copyfunc_type(copyfunc), ossl_check_X509_INFO_freefunc_type(freefunc)))
#define sk_X509_INFO_set_cmp_func(sk, cmp) ((sk_X509_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_compfunc_type(cmp)))


/*
 * The next 2 structures and their 8 routines are used to manipulate Netscape's
 * spki structures - useful if you are writing a CA web page
 */
typedef struct Netscape_spkac_st {
    X509_PUBKEY *pubkey;
    ASN1_IA5STRING *challenge;  /* challenge sent in atlas >= PR2 */
} NETSCAPE_SPKAC;

typedef struct Netscape_spki_st {
    NETSCAPE_SPKAC *spkac;      /* signed public key and challenge */
    X509_ALGOR sig_algor;
    ASN1_BIT_STRING *signature;
} NETSCAPE_SPKI;

/* Netscape certificate sequence structure */
typedef struct Netscape_certificate_sequence {
    ASN1_OBJECT *type;
    STACK_OF(X509) *certs;
} NETSCAPE_CERT_SEQUENCE;

/*- Unused (and iv length is wrong)
typedef struct CBCParameter_st
        {
        unsigned char iv[8];
        } CBC_PARAM;
*/

/* Password based encryption structure */

typedef struct PBEPARAM_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *iter;
} PBEPARAM;

/* Password based encryption V2 structures */

typedef struct PBE2PARAM_st {
    X509_ALGOR *keyfunc;
    X509_ALGOR *encryption;
} PBE2PARAM;

typedef struct PBKDF2PARAM_st {
/* Usually OCTET STRING but could be anything */
    ASN1_TYPE *salt;
    ASN1_INTEGER *iter;
    ASN1_INTEGER *keylength;
    X509_ALGOR *prf;
} PBKDF2PARAM;

#ifndef OPENSSL_NO_SCRYPT
typedef struct SCRYPT_PARAMS_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *costParameter;
    ASN1_INTEGER *blockSize;
    ASN1_INTEGER *parallelizationParameter;
    ASN1_INTEGER *keyLength;
} SCRYPT_PARAMS;
#endif

#ifdef  __cplusplus
}
#endif

# include <openssl/x509_vfy.h>
# include <openssl/pkcs7.h>

#ifdef  __cplusplus
extern "C" {
#endif

# define X509_EXT_PACK_UNKNOWN   1
# define X509_EXT_PACK_STRING    2

# define         X509_extract_key(x)     X509_get_pubkey(x)/*****/
# define         X509_REQ_extract_key(a) X509_REQ_get_pubkey(a)
# define         X509_name_cmp(a,b)      X509_NAME_cmp((a),(b))

void X509_CRL_set_default_method(const X509_CRL_METHOD *meth);
X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl),
                                     int (*crl_free) (X509_CRL *crl),
                                     int (*crl_lookup) (X509_CRL *crl,
                                                        X509_REVOKED **ret,
                                                        const
                                                        ASN1_INTEGER *serial,
                                                        const
                                                        X509_NAME *issuer),
                                     int (*crl_verify) (X509_CRL *crl,
                                                        EVP_PKEY *pk));
void X509_CRL_METHOD_free(X509_CRL_METHOD *m);

void X509_CRL_set_meth_data(X509_CRL *crl, void *dat);
void *X509_CRL_get_meth_data(X509_CRL *crl);

const char *X509_verify_cert_error_string(long n);

int X509_verify(X509 *a, EVP_PKEY *r);
int X509_self_signed(X509 *cert, int verify_signature);

int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx,
                       const char *propq);
int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r);
int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r);
int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r);

NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len);
char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x);
EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x);
int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey);

int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki);

int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent);
int X509_signature_print(BIO *bp, const X509_ALGOR *alg,
                         const ASN1_STRING *sig);

int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx);
int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx);
int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx);
int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md);

int X509_pubkey_digest(const X509 *data, const EVP_MD *type,
                       unsigned char *md, unsigned int *len);
int X509_digest(const X509 *data, const EVP_MD *type,
                unsigned char *md, unsigned int *len);
ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert,
                                   EVP_MD **md_used, int *md_is_fallback);
int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type,
                    unsigned char *md, unsigned int *len);
int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type,
                    unsigned char *md, unsigned int *len);
int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type,
                     unsigned char *md, unsigned int *len);

X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout);
X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout);
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  include <openssl/http.h> /* OSSL_HTTP_REQ_CTX_nbio_d2i */
#  define X509_http_nbio(rctx, pcert) \
      OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509))
#  define X509_CRL_http_nbio(rctx, pcrl) \
      OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL))
# endif

# ifndef OPENSSL_NO_STDIO
X509 *d2i_X509_fp(FILE *fp, X509 **x509);
int i2d_X509_fp(FILE *fp, const X509 *x509);
X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl);
int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl);
X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req);
int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req);
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa);
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_DSA
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa);
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa);
#   endif
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_EC
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey);
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey);
#   endif /* OPENSSL_NO_EC */
#  endif /* OPENSSL_NO_DEPRECATED_3_0 */
X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8);
int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8);
X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk);
int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk);
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,
                                                PKCS8_PRIV_KEY_INFO **p8inf);
int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf);
int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key);
int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx,
                               const char *propq);
EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a);
int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
# endif

X509 *d2i_X509_bio(BIO *bp, X509 **x509);
int i2d_X509_bio(BIO *bp, const X509 *x509);
X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl);
int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl);
X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req);
int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req);
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa);
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_DSA
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa);
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa);
#   endif
#  endif

#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_EC
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey);
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey);
#   endif /* OPENSSL_NO_EC */
#  endif /* OPENSSL_NO_DEPRECATED_3_0 */

X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8);
int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8);
X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk);
int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk);
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
                                                 PKCS8_PRIV_KEY_INFO **p8inf);
int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf);
int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key);
int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx,
                                const char *propq);
EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);

DECLARE_ASN1_DUP_FUNCTION(X509)
DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR)
DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE)
DECLARE_ASN1_DUP_FUNCTION(X509_CRL)
DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION)
DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY)
DECLARE_ASN1_DUP_FUNCTION(X509_REQ)
DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED)
int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype,
                    void *pval);
void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype,
                     const void **ppval, const X509_ALGOR *algor);
void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);
int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b);
int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src);

DECLARE_ASN1_DUP_FUNCTION(X509_NAME)
DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY)

int X509_cmp_time(const ASN1_TIME *s, time_t *t);
int X509_cmp_current_time(const ASN1_TIME *s);
int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm,
                       const ASN1_TIME *start, const ASN1_TIME *end);
ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t);
ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s,
                            int offset_day, long offset_sec, time_t *t);
ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj);

const char *X509_get_default_cert_area(void);
const char *X509_get_default_cert_dir(void);
const char *X509_get_default_cert_file(void);
const char *X509_get_default_cert_dir_env(void);
const char *X509_get_default_cert_file_env(void);
const char *X509_get_default_private_dir(void);

X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey);

DECLARE_ASN1_FUNCTIONS(X509_ALGOR)
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS)
DECLARE_ASN1_FUNCTIONS(X509_VAL)

DECLARE_ASN1_FUNCTIONS(X509_PUBKEY)

X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key);
EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key);
int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain);
long X509_get_pathlen(X509 *x);
DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY)
EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length,
                        OSSL_LIB_CTX *libctx, const char *propq);
# ifndef OPENSSL_NO_DEPRECATED_3_0
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY)
# endif
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  ifndef OPENSSL_NO_DSA
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY)
#  endif
# endif
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  ifndef OPENSSL_NO_EC
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY)
#  endif
# endif

DECLARE_ASN1_FUNCTIONS(X509_SIG)
void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg,
                   const ASN1_OCTET_STRING **pdigest);
void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg,
                   ASN1_OCTET_STRING **pdigest);

DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO)
DECLARE_ASN1_FUNCTIONS(X509_REQ)
X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq);

DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE)
X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value);

DECLARE_ASN1_FUNCTIONS(X509_EXTENSION)
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS)

DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY)

DECLARE_ASN1_FUNCTIONS(X509_NAME)

int X509_NAME_set(X509_NAME **xn, const X509_NAME *name);

DECLARE_ASN1_FUNCTIONS(X509_CINF)
DECLARE_ASN1_FUNCTIONS(X509)
X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX)

#define X509_get_ex_new_index(l, p, newf, dupf, freef) \
    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef)
int X509_set_ex_data(X509 *r, int idx, void *arg);
void *X509_get_ex_data(const X509 *r, int idx);
DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX)

int i2d_re_X509_tbs(X509 *x, unsigned char **pp);

int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid,
                      int *secbits, uint32_t *flags);
void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid,
                       int secbits, uint32_t flags);

int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits,
                            uint32_t *flags);

void X509_get0_signature(const ASN1_BIT_STRING **psig,
                         const X509_ALGOR **palg, const X509 *x);
int X509_get_signature_nid(const X509 *x);

void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id);
ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x);
void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id);
ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x);

int X509_alias_set1(X509 *x, const unsigned char *name, int len);
int X509_keyid_set1(X509 *x, const unsigned char *id, int len);
unsigned char *X509_alias_get0(X509 *x, int *len);
unsigned char *X509_keyid_get0(X509 *x, int *len);

DECLARE_ASN1_FUNCTIONS(X509_REVOKED)
DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO)
DECLARE_ASN1_FUNCTIONS(X509_CRL)
X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq);

int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
int X509_CRL_get0_by_serial(X509_CRL *crl,
                            X509_REVOKED **ret, const ASN1_INTEGER *serial);
int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x);

X509_PKEY *X509_PKEY_new(void);
void X509_PKEY_free(X509_PKEY *a);

DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI)
DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC)
DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE)

X509_INFO *X509_INFO_new(void);
void X509_INFO_free(X509_INFO *a);
char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size);

#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0
int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1,
                ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey);
OSSL_DEPRECATEDIN_3_0
int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data,
                unsigned char *md, unsigned int *len);
OSSL_DEPRECATEDIN_3_0
int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2,
              ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey,
              const EVP_MD *type);
#endif
int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data,
                     unsigned char *md, unsigned int *len);
int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg,
                     const ASN1_BIT_STRING *signature, const void *data,
                     EVP_PKEY *pkey);
int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg,
                         const ASN1_BIT_STRING *signature, const void *data,
                         EVP_MD_CTX *ctx);
int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2,
                   ASN1_BIT_STRING *signature, const void *data,
                   EVP_PKEY *pkey, const EVP_MD *md);
int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1,
                       X509_ALGOR *algor2, ASN1_BIT_STRING *signature,
                       const void *data, EVP_MD_CTX *ctx);

#define X509_VERSION_1 0
#define X509_VERSION_2 1
#define X509_VERSION_3 2

long X509_get_version(const X509 *x);
int X509_set_version(X509 *x, long version);
int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial);
ASN1_INTEGER *X509_get_serialNumber(X509 *x);
const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x);
int X509_set_issuer_name(X509 *x, const X509_NAME *name);
X509_NAME *X509_get_issuer_name(const X509 *a);
int X509_set_subject_name(X509 *x, const X509_NAME *name);
X509_NAME *X509_get_subject_name(const X509 *a);
const ASN1_TIME * X509_get0_notBefore(const X509 *x);
ASN1_TIME *X509_getm_notBefore(const X509 *x);
int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm);
const ASN1_TIME *X509_get0_notAfter(const X509 *x);
ASN1_TIME *X509_getm_notAfter(const X509 *x);
int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm);
int X509_set_pubkey(X509 *x, EVP_PKEY *pkey);
int X509_up_ref(X509 *x);
int X509_get_signature_type(const X509 *x);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define X509_get_notBefore X509_getm_notBefore
#  define X509_get_notAfter X509_getm_notAfter
#  define X509_set_notBefore X509_set1_notBefore
#  define X509_set_notAfter X509_set1_notAfter
#endif


/*
 * This one is only used so that a binary form can output, as in
 * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf)
 */
X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x);
const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x);
void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid,
                    const ASN1_BIT_STRING **psuid);
const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x);

EVP_PKEY *X509_get0_pubkey(const X509 *x);
EVP_PKEY *X509_get_pubkey(X509 *x);
ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x);

#define X509_REQ_VERSION_1 0

long X509_REQ_get_version(const X509_REQ *req);
int X509_REQ_set_version(X509_REQ *x, long version);
X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req);
int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name);
void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig,
                             const X509_ALGOR **palg);
void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig);
int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg);
int X509_REQ_get_signature_nid(const X509_REQ *req);
int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp);
int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey);
EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req);
EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req);
X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req);
int X509_REQ_extension_nid(int nid);
int *X509_REQ_get_extension_nids(void);
void X509_REQ_set_extension_nids(int *nids);
STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req);
int X509_REQ_add_extensions_nid(X509_REQ *req,
                                const STACK_OF(X509_EXTENSION) *exts, int nid);
int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext);
int X509_REQ_get_attr_count(const X509_REQ *req);
int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos);
int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj,
                             int lastpos);
X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc);
X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);
int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr);
int X509_REQ_add1_attr_by_OBJ(X509_REQ *req,
                              const ASN1_OBJECT *obj, int type,
                              const unsigned char *bytes, int len);
int X509_REQ_add1_attr_by_NID(X509_REQ *req,
                              int nid, int type,
                              const unsigned char *bytes, int len);
int X509_REQ_add1_attr_by_txt(X509_REQ *req,
                              const char *attrname, int type,
                              const unsigned char *bytes, int len);

#define X509_CRL_VERSION_1 0
#define X509_CRL_VERSION_2 1

int X509_CRL_set_version(X509_CRL *x, long version);
int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name);
int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm);
int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm);
int X509_CRL_sort(X509_CRL *crl);
int X509_CRL_up_ref(X509_CRL *crl);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate
#  define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate
#endif

long X509_CRL_get_version(const X509_CRL *crl);
const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl);
const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl);
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl);
OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl);
#endif
X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl);
const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl);
STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl);
void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig,
                             const X509_ALGOR **palg);
int X509_CRL_get_signature_nid(const X509_CRL *crl);
int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp);

const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x);
int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial);
const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x);
int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);
const STACK_OF(X509_EXTENSION) *
X509_REVOKED_get0_extensions(const X509_REVOKED *r);

X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer,
                        EVP_PKEY *skey, const EVP_MD *md, unsigned int flags);

int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey);

int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey);
int X509_chain_check_suiteb(int *perror_depth,
                            X509 *x, STACK_OF(X509) *chain,
                            unsigned long flags);
int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags);
STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain);

int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);
unsigned long X509_issuer_and_serial_hash(X509 *a);

int X509_issuer_name_cmp(const X509 *a, const X509 *b);
unsigned long X509_issuer_name_hash(X509 *a);

int X509_subject_name_cmp(const X509 *a, const X509 *b);
unsigned long X509_subject_name_hash(X509 *x);

# ifndef OPENSSL_NO_MD5
unsigned long X509_issuer_name_hash_old(X509 *a);
unsigned long X509_subject_name_hash_old(X509 *x);
# endif

# define X509_ADD_FLAG_DEFAULT  0
# define X509_ADD_FLAG_UP_REF   0x1
# define X509_ADD_FLAG_PREPEND  0x2
# define X509_ADD_FLAG_NO_DUP   0x4
# define X509_ADD_FLAG_NO_SS    0x8
int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags);
int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags);

int X509_cmp(const X509 *a, const X509 *b);
int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);
#ifndef OPENSSL_NO_DEPRECATED_3_0
# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL)
OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x,
                                                const EVP_PKEY *pubkey);
#endif
unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx,
                                const char *propq, int *ok);
unsigned long X509_NAME_hash_old(const X509_NAME *x);

int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);
int X509_CRL_match(const X509_CRL *a, const X509_CRL *b);
int X509_aux_print(BIO *out, X509 *x, int indent);
# ifndef OPENSSL_NO_STDIO
int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag,
                     unsigned long cflag);
int X509_print_fp(FILE *bp, X509 *x);
int X509_CRL_print_fp(FILE *bp, X509_CRL *x);
int X509_REQ_print_fp(FILE *bp, X509_REQ *req);
int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent,
                          unsigned long flags);
# endif

int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase);
int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent,
                       unsigned long flags);
int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag,
                  unsigned long cflag);
int X509_print(BIO *bp, X509 *x);
int X509_ocspid_print(BIO *bp, X509 *x);
int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag);
int X509_CRL_print(BIO *bp, X509_CRL *x);
int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag,
                      unsigned long cflag);
int X509_REQ_print(BIO *bp, X509_REQ *req);

int X509_NAME_entry_count(const X509_NAME *name);
int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid,
                              char *buf, int len);
int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                              char *buf, int len);

/*
 * NOTE: you should be passing -1, not 0 as lastpos. The functions that use
 * lastpos, search after that position on.
 */
int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos);
int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                               int lastpos);
X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc);
X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);
int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne,
                        int loc, int set);
int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
                                               const char *field, int type,
                                               const unsigned char *bytes,
                                               int len);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
                                               int type,
                                               const unsigned char *bytes,
                                               int len);
int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
                                               const ASN1_OBJECT *obj, int type,
                                               const unsigned char *bytes,
                                               int len);
int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj);
int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
                             const unsigned char *bytes, int len);
ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne);
ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne);
int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne);

int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder,
                       size_t *pderlen);

int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x);
int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x,
                          int nid, int lastpos);
int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x,
                          const ASN1_OBJECT *obj, int lastpos);
int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x,
                               int crit, int lastpos);
X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc);
X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc);
STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,
                                         X509_EXTENSION *ex, int loc);

int X509_get_ext_count(const X509 *x);
int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos);
int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos);
int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos);
X509_EXTENSION *X509_get_ext(const X509 *x, int loc);
X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx);
int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit,
                      unsigned long flags);

int X509_CRL_get_ext_count(const X509_CRL *x);
int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos);
int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj,
                            int lastpos);
int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos);
X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc);
X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);
int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);
void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx);
int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit,
                          unsigned long flags);

int X509_REVOKED_get_ext_count(const X509_REVOKED *x);
int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos);
int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj,
                                int lastpos);
int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit,
                                     int lastpos);
X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc);
X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);
int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);
void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit,
                               int *idx);
int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit,
                              unsigned long flags);

X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
                                             int nid, int crit,
                                             ASN1_OCTET_STRING *data);
X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex,
                                             const ASN1_OBJECT *obj, int crit,
                                             ASN1_OCTET_STRING *data);
int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj);
int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit);
int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data);
ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex);
ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne);
int X509_EXTENSION_get_critical(const X509_EXTENSION *ex);

int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x);
int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid,
                           int lastpos);
int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk,
                           const ASN1_OBJECT *obj, int lastpos);
X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc);
X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
                                           X509_ATTRIBUTE *attr);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE)
                                                  **x, const ASN1_OBJECT *obj,
                                                  int type,
                                                  const unsigned char *bytes,
                                                  int len);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE)
                                                  **x, int nid, int type,
                                                  const unsigned char *bytes,
                                                  int len);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE)
                                                  **x, const char *attrname,
                                                  int type,
                                                  const unsigned char *bytes,
                                                  int len);
void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x,
                              const ASN1_OBJECT *obj, int lastpos, int type);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
                                             int atrtype, const void *data,
                                             int len);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
                                             const ASN1_OBJECT *obj,
                                             int atrtype, const void *data,
                                             int len);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,
                                             const char *atrname, int type,
                                             const unsigned char *bytes,
                                             int len);
int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj);
int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
                             const void *data, int len);
void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype,
                               void *data);
int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr);
ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr);
ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx);

int EVP_PKEY_get_attr_count(const EVP_PKEY *key);
int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos);
int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj,
                             int lastpos);
X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc);
X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc);
int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr);
int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key,
                              const ASN1_OBJECT *obj, int type,
                              const unsigned char *bytes, int len);
int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key,
                              int nid, int type,
                              const unsigned char *bytes, int len);
int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key,
                              const char *attrname, int type,
                              const unsigned char *bytes, int len);

/* lookup a cert from a X509 STACK */
X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name,
                                     const ASN1_INTEGER *serial);
X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name);

DECLARE_ASN1_FUNCTIONS(PBEPARAM)
DECLARE_ASN1_FUNCTIONS(PBE2PARAM)
DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM)
#ifndef OPENSSL_NO_SCRYPT
DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS)
#endif

int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter,
                         const unsigned char *salt, int saltlen);
int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter,
                            const unsigned char *salt, int saltlen,
                            OSSL_LIB_CTX *libctx);

X509_ALGOR *PKCS5_pbe_set(int alg, int iter,
                          const unsigned char *salt, int saltlen);
X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter,
                             const unsigned char *salt, int saltlen,
                             OSSL_LIB_CTX *libctx);

X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
                           unsigned char *salt, int saltlen);
X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter,
                              unsigned char *salt, int saltlen,
                              unsigned char *aiv, int prf_nid);
X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter,
                                 unsigned char *salt, int saltlen,
                                 unsigned char *aiv, int prf_nid,
                                 OSSL_LIB_CTX *libctx);

#ifndef OPENSSL_NO_SCRYPT
X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher,
                                  const unsigned char *salt, int saltlen,
                                  unsigned char *aiv, uint64_t N, uint64_t r,
                                  uint64_t p);
#endif

X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen,
                             int prf_nid, int keylen);
X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen,
                                int prf_nid, int keylen,
                                OSSL_LIB_CTX *libctx);

/* PKCS#8 utilities */

DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO)

EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8);
EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx,
                            const char *propq);
PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey);

int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj,
                    int version, int ptype, void *pval,
                    unsigned char *penc, int penclen);
int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg,
                    const unsigned char **pk, int *ppklen,
                    const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8);

const STACK_OF(X509_ATTRIBUTE) *
PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8);
int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr);
int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type,
                                const unsigned char *bytes, int len);
int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj,
                                int type, const unsigned char *bytes, int len);


int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
                           int ptype, void *pval,
                           unsigned char *penc, int penclen);
int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
                           const unsigned char **pk, int *ppklen,
                           X509_ALGOR **pa, const X509_PUBKEY *pub);
int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b);

# ifdef  __cplusplus
}
# endif
#endif
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    /*
 * WARNING: do not edit!
 * Generated by Makefile from include/openssl/x509.h.in
 *
 * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */



#ifndef OPENSSL_X509_H
# define OPENSSL_X509_H
# pragma once

# include <openssl/macros.h>
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define HEADER_X509_H
# endif

# include <openssl/e_os2.h>
# include <openssl/types.h>
# include <openssl/symhacks.h>
# include <openssl/buffer.h>
# include <openssl/evp.h>
# include <openssl/bio.h>
# include <openssl/asn1.h>
# include <openssl/safestack.h>
# include <openssl/ec.h>

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  include <openssl/rsa.h>
#  include <openssl/dsa.h>
#  include <openssl/dh.h>
# endif

# include <openssl/sha.h>
# include <openssl/x509err.h>

#ifdef  __cplusplus
extern "C" {
#endif

/* Needed stacks for types defined in other headers */
SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME)
#define sk_X509_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_value(sk, idx) ((X509_NAME *)OPENSSL_sk_value(ossl_check_const_X509_NAME_sk_type(sk), (idx)))
#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp)))
#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n)))
#define sk_X509_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_sk_type(sk), (n))
#define sk_X509_NAME_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_delete(sk, i) ((X509_NAME *)OPENSSL_sk_delete(ossl_check_X509_NAME_sk_type(sk), (i)))
#define sk_X509_NAME_delete_ptr(sk, ptr) ((X509_NAME *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_pop(sk) ((X509_NAME *)OPENSSL_sk_pop(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_shift(sk) ((X509_NAME *)OPENSSL_sk_shift(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk),ossl_check_X509_NAME_freefunc_type(freefunc))
#define sk_X509_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), (idx))
#define sk_X509_NAME_set(sk, idx, ptr) ((X509_NAME *)OPENSSL_sk_set(ossl_check_X509_NAME_sk_type(sk), (idx), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), pnum)
#define sk_X509_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_dup(sk) ((STACK_OF(X509_NAME) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_sk_type(sk), ossl_check_X509_NAME_copyfunc_type(copyfunc), ossl_check_X509_NAME_freefunc_type(freefunc)))
#define sk_X509_NAME_set_cmp_func(sk, cmp) ((sk_X509_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509)
#define sk_X509_num(sk) OPENSSL_sk_num(ossl_check_const_X509_sk_type(sk))
#define sk_X509_value(sk, idx) ((X509 *)OPENSSL_sk_value(ossl_check_const_X509_sk_type(sk), (idx)))
#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp)))
#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_new_null())
#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n)))
#define sk_X509_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_sk_type(sk), (n))
#define sk_X509_free(sk) OPENSSL_sk_free(ossl_check_X509_sk_type(sk))
#define sk_X509_zero(sk) OPENSSL_sk_zero(ossl_check_X509_sk_type(sk))
#define sk_X509_delete(sk, i) ((X509 *)OPENSSL_sk_delete(ossl_check_X509_sk_type(sk), (i)))
#define sk_X509_delete_ptr(sk, ptr) ((X509 *)OPENSSL_sk_delete_ptr(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)))
#define sk_X509_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_pop(sk) ((X509 *)OPENSSL_sk_pop(ossl_check_X509_sk_type(sk)))
#define sk_X509_shift(sk) ((X509 *)OPENSSL_sk_shift(ossl_check_X509_sk_type(sk)))
#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk),ossl_check_X509_freefunc_type(freefunc))
#define sk_X509_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), (idx))
#define sk_X509_set(sk, idx, ptr) ((X509 *)OPENSSL_sk_set(ossl_check_X509_sk_type(sk), (idx), ossl_check_X509_type(ptr)))
#define sk_X509_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), pnum)
#define sk_X509_sort(sk) OPENSSL_sk_sort(ossl_check_X509_sk_type(sk))
#define sk_X509_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_sk_type(sk))
#define sk_X509_dup(sk) ((STACK_OF(X509) *)OPENSSL_sk_dup(ossl_check_const_X509_sk_type(sk)))
#define sk_X509_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_sk_type(sk), ossl_check_X509_copyfunc_type(copyfunc), ossl_check_X509_freefunc_type(freefunc)))
#define sk_X509_set_cmp_func(sk, cmp) ((sk_X509_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_sk_type(sk), ossl_check_X509_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED)
#define sk_X509_REVOKED_num(sk) OPENSSL_sk_num(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_value(sk, idx) ((X509_REVOKED *)OPENSSL_sk_value(ossl_check_const_X509_REVOKED_sk_type(sk), (idx)))
#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp)))
#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_null())
#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n)))
#define sk_X509_REVOKED_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_REVOKED_sk_type(sk), (n))
#define sk_X509_REVOKED_free(sk) OPENSSL_sk_free(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_zero(sk) OPENSSL_sk_zero(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_delete(sk, i) ((X509_REVOKED *)OPENSSL_sk_delete(ossl_check_X509_REVOKED_sk_type(sk), (i)))
#define sk_X509_REVOKED_delete_ptr(sk, ptr) ((X509_REVOKED *)OPENSSL_sk_delete_ptr(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_pop(sk) ((X509_REVOKED *)OPENSSL_sk_pop(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_shift(sk) ((X509_REVOKED *)OPENSSL_sk_shift(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk),ossl_check_X509_REVOKED_freefunc_type(freefunc))
#define sk_X509_REVOKED_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), (idx))
#define sk_X509_REVOKED_set(sk, idx, ptr) ((X509_REVOKED *)OPENSSL_sk_set(ossl_check_X509_REVOKED_sk_type(sk), (idx), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), pnum)
#define sk_X509_REVOKED_sort(sk) OPENSSL_sk_sort(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_dup(sk) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_dup(ossl_check_const_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_copyfunc_type(copyfunc), ossl_check_X509_REVOKED_freefunc_type(freefunc)))
#define sk_X509_REVOKED_set_cmp_func(sk, cmp) ((sk_X509_REVOKED_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL)
#define sk_X509_CRL_num(sk) OPENSSL_sk_num(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_value(sk, idx) ((X509_CRL *)OPENSSL_sk_value(ossl_check_const_X509_CRL_sk_type(sk), (idx)))
#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp)))
#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_null())
#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n)))
#define sk_X509_CRL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_CRL_sk_type(sk), (n))
#define sk_X509_CRL_free(sk) OPENSSL_sk_free(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_zero(sk) OPENSSL_sk_zero(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_delete(sk, i) ((X509_CRL *)OPENSSL_sk_delete(ossl_check_X509_CRL_sk_type(sk), (i)))
#define sk_X509_CRL_delete_ptr(sk, ptr) ((X509_CRL *)OPENSSL_sk_delete_ptr(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_pop(sk) ((X509_CRL *)OPENSSL_sk_pop(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_shift(sk) ((X509_CRL *)OPENSSL_sk_shift(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk),ossl_check_X509_CRL_freefunc_type(freefunc))
#define sk_X509_CRL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), (idx))
#define sk_X509_CRL_set(sk, idx, ptr) ((X509_CRL *)OPENSSL_sk_set(ossl_check_X509_CRL_sk_type(sk), (idx), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), pnum)
#define sk_X509_CRL_sort(sk) OPENSSL_sk_sort(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_dup(sk) ((STACK_OF(X509_CRL) *)OPENSSL_sk_dup(ossl_check_const_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_CRL) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_CRL_sk_type(sk), ossl_check_X509_CRL_copyfunc_type(copyfunc), ossl_check_X509_CRL_freefunc_type(freefunc)))
#define sk_X509_CRL_set_cmp_func(sk, cmp) ((sk_X509_CRL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_compfunc_type(cmp)))


/* Flags for X509_get_signature_info() */
/* Signature info is valid */
# define X509_SIG_INFO_VALID     0x1
/* Signature is suitable for TLS use */
# define X509_SIG_INFO_TLS       0x2

# define X509_FILETYPE_PEM       1
# define X509_FILETYPE_ASN1      2
# define X509_FILETYPE_DEFAULT   3

# define X509v3_KU_DIGITAL_SIGNATURE     0x0080
# define X509v3_KU_NON_REPUDIATION       0x0040
# define X509v3_KU_KEY_ENCIPHERMENT      0x0020
# define X509v3_KU_DATA_ENCIPHERMENT     0x0010
# define X509v3_KU_KEY_AGREEMENT         0x0008
# define X509v3_KU_KEY_CERT_SIGN         0x0004
# define X509v3_KU_CRL_SIGN              0x0002
# define X509v3_KU_ENCIPHER_ONLY         0x0001
# define X509v3_KU_DECIPHER_ONLY         0x8000
# define X509v3_KU_UNDEF                 0xffff

struct X509_algor_st {
    ASN1_OBJECT *algorithm;
    ASN1_TYPE *parameter;
} /* X509_ALGOR */ ;

typedef STACK_OF(X509_ALGOR) X509_ALGORS;

typedef struct X509_val_st {
    ASN1_TIME *notBefore;
    ASN1_TIME *notAfter;
} X509_VAL;

typedef struct X509_sig_st X509_SIG;

typedef struct X509_name_entry_st X509_NAME_ENTRY;

SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY)
#define sk_X509_NAME_ENTRY_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_value(sk, idx) ((X509_NAME_ENTRY *)OPENSSL_sk_value(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), (idx)))
#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))
#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n)))
#define sk_X509_NAME_ENTRY_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_ENTRY_sk_type(sk), (n))
#define sk_X509_NAME_ENTRY_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_delete(sk, i) ((X509_NAME_ENTRY *)OPENSSL_sk_delete(ossl_check_X509_NAME_ENTRY_sk_type(sk), (i)))
#define sk_X509_NAME_ENTRY_delete_ptr(sk, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_pop(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_pop(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_shift(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_shift(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk),ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc))
#define sk_X509_NAME_ENTRY_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), (idx))
#define sk_X509_NAME_ENTRY_set(sk, idx, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_set(ossl_check_X509_NAME_ENTRY_sk_type(sk), (idx), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), pnum)
#define sk_X509_NAME_ENTRY_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_dup(sk) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_copyfunc_type(copyfunc), ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)))
#define sk_X509_NAME_ENTRY_set_cmp_func(sk, cmp) ((sk_X509_NAME_ENTRY_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))


# define X509_EX_V_NETSCAPE_HACK         0x8000
# define X509_EX_V_INIT                  0x0001
typedef struct X509_extension_st X509_EXTENSION;
SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION)
#define sk_X509_EXTENSION_num(sk) OPENSSL_sk_num(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_value(sk, idx) ((X509_EXTENSION *)OPENSSL_sk_value(ossl_check_const_X509_EXTENSION_sk_type(sk), (idx)))
#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp)))
#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_null())
#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n)))
#define sk_X509_EXTENSION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_EXTENSION_sk_type(sk), (n))
#define sk_X509_EXTENSION_free(sk) OPENSSL_sk_free(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_zero(sk) OPENSSL_sk_zero(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_delete(sk, i) ((X509_EXTENSION *)OPENSSL_sk_delete(ossl_check_X509_EXTENSION_sk_type(sk), (i)))
#define sk_X509_EXTENSION_delete_ptr(sk, ptr) ((X509_EXTENSION *)OPENSSL_sk_delete_ptr(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_pop(sk) ((X509_EXTENSION *)OPENSSL_sk_pop(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_shift(sk) ((X509_EXTENSION *)OPENSSL_sk_shift(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk),ossl_check_X509_EXTENSION_freefunc_type(freefunc))
#define sk_X509_EXTENSION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), (idx))
#define sk_X509_EXTENSION_set(sk, idx, ptr) ((X509_EXTENSION *)OPENSSL_sk_set(ossl_check_X509_EXTENSION_sk_type(sk), (idx), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), pnum)
#define sk_X509_EXTENSION_sort(sk) OPENSSL_sk_sort(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_dup(sk) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_dup(ossl_check_const_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_copyfunc_type(copyfunc), ossl_check_X509_EXTENSION_freefunc_type(freefunc)))
#define sk_X509_EXTENSION_set_cmp_func(sk, cmp) ((sk_X509_EXTENSION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_compfunc_type(cmp)))

typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS;
typedef struct x509_attributes_st X509_ATTRIBUTE;
SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE)
#define sk_X509_ATTRIBUTE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_value(sk, idx) ((X509_ATTRIBUTE *)OPENSSL_sk_value(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), (idx)))
#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))
#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_null())
#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n)))
#define sk_X509_ATTRIBUTE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ATTRIBUTE_sk_type(sk), (n))
#define sk_X509_ATTRIBUTE_free(sk) OPENSSL_sk_free(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_delete(sk, i) ((X509_ATTRIBUTE *)OPENSSL_sk_delete(ossl_check_X509_ATTRIBUTE_sk_type(sk), (i)))
#define sk_X509_ATTRIBUTE_delete_ptr(sk, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_delete_ptr(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_pop(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_pop(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_shift(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_shift(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk),ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc))
#define sk_X509_ATTRIBUTE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), (idx))
#define sk_X509_ATTRIBUTE_set(sk, idx, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_set(ossl_check_X509_ATTRIBUTE_sk_type(sk), (idx), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), pnum)
#define sk_X509_ATTRIBUTE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_dup(sk) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_dup(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_copyfunc_type(copyfunc), ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)))
#define sk_X509_ATTRIBUTE_set_cmp_func(sk, cmp) ((sk_X509_ATTRIBUTE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))

typedef struct X509_req_info_st X509_REQ_INFO;
typedef struct X509_req_st X509_REQ;
typedef struct x509_cert_aux_st X509_CERT_AUX;
typedef struct x509_cinf_st X509_CINF;

/* Flags for X509_print_ex() */

# define X509_FLAG_COMPAT                0
# define X509_FLAG_NO_HEADER             1L
# define X509_FLAG_NO_VERSION            (1L << 1)
# define X509_FLAG_NO_SERIAL             (1L << 2)
# define X509_FLAG_NO_SIGNAME            (1L << 3)
# define X509_FLAG_NO_ISSUER             (1L << 4)
# define X509_FLAG_NO_VALIDITY           (1L << 5)
# define X509_FLAG_NO_SUBJECT            (1L << 6)
# define X509_FLAG_NO_PUBKEY             (1L << 7)
# define X509_FLAG_NO_EXTENSIONS         (1L << 8)
# define X509_FLAG_NO_SIGDUMP            (1L << 9)
# define X509_FLAG_NO_AUX                (1L << 10)
# define X509_FLAG_NO_ATTRIBUTES         (1L << 11)
# define X509_FLAG_NO_IDS                (1L << 12)
# define X509_FLAG_EXTENSIONS_ONLY_KID   (1L << 13)

/* Flags specific to X509_NAME_print_ex() */

/* The field separator information */

# define XN_FLAG_SEP_MASK        (0xf << 16)

# define XN_FLAG_COMPAT          0/* Traditional; use old X509_NAME_print */
# define XN_FLAG_SEP_COMMA_PLUS  (1 << 16)/* RFC2253 ,+ */
# define XN_FLAG_SEP_CPLUS_SPC   (2 << 16)/* ,+ spaced: more readable */
# define XN_FLAG_SEP_SPLUS_SPC   (3 << 16)/* ;+ spaced */
# define XN_FLAG_SEP_MULTILINE   (4 << 16)/* One line per field */

# define XN_FLAG_DN_REV          (1 << 20)/* Reverse DN order */

/* How the field name is shown */

# define XN_FLAG_FN_MASK         (0x3 << 21)

# define XN_FLAG_FN_SN           0/* Object short name */
# define XN_FLAG_FN_LN           (1 << 21)/* Object long name */
# define XN_FLAG_FN_OID          (2 << 21)/* Always use OIDs */
# define XN_FLAG_FN_NONE         (3 << 21)/* No field names */

# define XN_FLAG_SPC_EQ          (1 << 23)/* Put spaces round '=' */

/*
 * This determines if we dump fields we don't recognise: RFC2253 requires
 * this.
 */

# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24)

# define XN_FLAG_FN_ALIGN        (1 << 25)/* Align field names to 20
                                           * characters */

/* Complete set of RFC2253 flags */

# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \
                        XN_FLAG_SEP_COMMA_PLUS | \
                        XN_FLAG_DN_REV | \
                        XN_FLAG_FN_SN | \
                        XN_FLAG_DUMP_UNKNOWN_FIELDS)

/* readable oneline form */

# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \
                        ASN1_STRFLGS_ESC_QUOTE | \
                        XN_FLAG_SEP_CPLUS_SPC | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_SN)

/* readable multiline form */

# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \
                        ASN1_STRFLGS_ESC_MSB | \
                        XN_FLAG_SEP_MULTILINE | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_LN | \
                        XN_FLAG_FN_ALIGN)

typedef struct X509_crl_info_st X509_CRL_INFO;

typedef struct private_key_st {
    int version;
    /* The PKCS#8 data types */
    X509_ALGOR *enc_algor;
    ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */
    /* When decrypted, the following will not be NULL */
    EVP_PKEY *dec_pkey;
    /* used to encrypt and decrypt */
    int key_length;
    char *key_data;
    int key_free;               /* true if we should auto free key_data */
    /* expanded version of 'enc_algor' */
    EVP_CIPHER_INFO cipher;
} X509_PKEY;

typedef struct X509_info_st {
    X509 *x509;
    X509_CRL *crl;
    X509_PKEY *x_pkey;
    EVP_CIPHER_INFO enc_cipher;
    int enc_len;
    char *enc_data;
} X509_INFO;
SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO)
#define sk_X509_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_value(sk, idx) ((X509_INFO *)OPENSSL_sk_value(ossl_check_const_X509_INFO_sk_type(sk), (idx)))
#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp)))
#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_null())
#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n)))
#define sk_X509_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_INFO_sk_type(sk), (n))
#define sk_X509_INFO_free(sk) OPENSSL_sk_free(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_delete(sk, i) ((X509_INFO *)OPENSSL_sk_delete(ossl_check_X509_INFO_sk_type(sk), (i)))
#define sk_X509_INFO_delete_ptr(sk, ptr) ((X509_INFO *)OPENSSL_sk_delete_ptr(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_pop(sk) ((X509_INFO *)OPENSSL_sk_pop(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_shift(sk) ((X509_INFO *)OPENSSL_sk_shift(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk),ossl_check_X509_INFO_freefunc_type(freefunc))
#define sk_X509_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), (idx))
#define sk_X509_INFO_set(sk, idx, ptr) ((X509_INFO *)OPENSSL_sk_set(ossl_check_X509_INFO_sk_type(sk), (idx), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), pnum)
#define sk_X509_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_dup(sk) ((STACK_OF(X509_INFO) *)OPENSSL_sk_dup(ossl_check_const_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_INFO_sk_type(sk), ossl_check_X509_INFO_copyfunc_type(copyfunc), ossl_check_X509_INFO_freefunc_type(freefunc)))
#define sk_X509_INFO_set_cmp_func(sk, cmp) ((sk_X509_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_compfunc_type(cmp)))


/*
 * The next 2 structures and their 8 routines are used to manipulate Netscape's
 * spki structures - useful if you are writing a CA web page
 */
typedef struct Netscape_spkac_st {
    X509_PUBKEY *pubkey;
    ASN1_IA5STRING *challenge;  /* challenge sent in atlas >= PR2 */
} NETSCAPE_SPKAC;

typedef struct Netscape_spki_st {
    NETSCAPE_SPKAC *spkac;      /* signed public key and challenge */
    X509_ALGOR sig_algor;
    ASN1_BIT_STRING *signature;
} NETSCAPE_SPKI;

/* Netscape certificate sequence structure */
typedef struct Netscape_certificate_sequence {
    ASN1_OBJECT *type;
    STACK_OF(X509) *certs;
} NETSCAPE_CERT_SEQUENCE;

/*- Unused (and iv length is wrong)
typedef struct CBCParameter_st
        {
        unsigned char iv[8];
        } CBC_PARAM;
*/

/* Password based encryption structure */

typedef struct PBEPARAM_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *iter;
} PBEPARAM;

/* Password based encryption V2 structures */

typedef struct PBE2PARAM_st {
    X509_ALGOR *keyfunc;
    X509_ALGOR *encryption;
} PBE2PARAM;

typedef struct PBKDF2PARAM_st {
/* Usually OCTET STRING but could be anything */
    ASN1_TYPE *salt;
    ASN1_INTEGER *iter;
    ASN1_INTEGER *keylength;
    X509_ALGOR *prf;
} PBKDF2PARAM;

#ifndef OPENSSL_NO_SCRYPT
typedef struct SCRYPT_PARAMS_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *costParameter;
    ASN1_INTEGER *blockSize;
    ASN1_INTEGER *parallelizationParameter;
    ASN1_INTEGER *keyLength;
} SCRYPT_PARAMS;
#endif

#ifdef  __cplusplus
}
#endif

# include <openssl/x509_vfy.h>
# include <openssl/pkcs7.h>

#ifdef  __cplusplus
extern "C" {
#endif

# define X509_EXT_PACK_UNKNOWN   1
# define X509_EXT_PACK_STRING    2

# define         X509_extract_key(x)     X509_get_pubkey(x)/*****/
# define         X509_REQ_extract_key(a) X509_REQ_get_pubkey(a)
# define         X509_name_cmp(a,b)      X509_NAME_cmp((a),(b))

void X509_CRL_set_default_method(const X509_CRL_METHOD *meth);
X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl),
                                     int (*crl_free) (X509_CRL *crl),
                                     int (*crl_lookup) (X509_CRL *crl,
                                                        X509_REVOKED **ret,
                                                        const
                                                        ASN1_INTEGER *serial,
                                                        const
                                                        X509_NAME *issuer),
                                     int (*crl_verify) (X509_CRL *crl,
                                                        EVP_PKEY *pk));
void X509_CRL_METHOD_free(X509_CRL_METHOD *m);

void X509_CRL_set_meth_data(X509_CRL *crl, void *dat);
void *X509_CRL_get_meth_data(X509_CRL *crl);

const char *X509_verify_cert_error_string(long n);

int X509_verify(X509 *a, EVP_PKEY *r);
int X509_self_signed(X509 *cert, int verify_signature);

int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx,
                       const char *propq);
int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r);
int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r);
int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r);

NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len);
char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x);
EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x);
int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey);

int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki);

int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent);
int X509_signature_print(BIO *bp, const X509_ALGOR *alg,
                         const ASN1_STRING *sig);

int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx);
int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx);
int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx);
int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md);

int X509_pubkey_digest(const X509 *data, const EVP_MD *type,
                       unsigned char *md, unsigned int *len);
int X509_digest(const X509 *data, const EVP_MD *type,
                unsigned char *md, unsigned int *len);
ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert,
                                   EVP_MD **md_used, int *md_is_fallback);
int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type,
                    unsigned char *md, unsigned int *len);
int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type,
                    unsigned char *md, unsigned int *len);
int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type,
                     unsigned char *md, unsigned int *len);

X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout);
X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout);
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  include <openssl/http.h> /* OSSL_HTTP_REQ_CTX_nbio_d2i */
#  define X509_http_nbio(rctx, pcert) \
      OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509))
#  define X509_CRL_http_nbio(rctx, pcrl) \
      OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL))
# endif

# ifndef OPENSSL_NO_STDIO
X509 *d2i_X509_fp(FILE *fp, X509 **x509);
int i2d_X509_fp(FILE *fp, const X509 *x509);
X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl);
int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl);
X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req);
int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req);
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa);
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_DSA
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa);
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa);
#   endif
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_EC
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey);
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey);
#   endif /* OPENSSL_NO_EC */
#  endif /* OPENSSL_NO_DEPRECATED_3_0 */
X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8);
int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8);
X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk);
int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk);
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,
                                                PKCS8_PRIV_KEY_INFO **p8inf);
int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf);
int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key);
int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx,
                               const char *propq);
EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a);
int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
# endif

X509 *d2i_X509_bio(BIO *bp, X509 **x509);
int i2d_X509_bio(BIO *bp, const X509 *x509);
X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl);
int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl);
X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req);
int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req);
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa);
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_DSA
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa);
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa);
#   endif
#  endif

#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_EC
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey);
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey);
#   endif /* OPENSSL_NO_EC */
#  endif /* OPENSSL_NO_DEPRECATED_3_0 */

X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8);
int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8);
X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk);
int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk);
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
                                                 PKCS8_PRIV_KEY_INFO **p8inf);
int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf);
int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key);
int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx,
                                const char *propq);
EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);

DECLARE_ASN1_DUP_FUNCTION(X509)
DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR)
DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE)
DECLARE_ASN1_DUP_FUNCTION(X509_CRL)
DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION)
DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY)
DECLARE_ASN1_DUP_FUNCTION(X509_REQ)
DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED)
int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype,
                    void *pval);
void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype,
                     const void **ppval, const X509_ALGOR *algor);
void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);
int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b);
int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src);

DECLARE_ASN1_DUP_FUNCTION(X509_NAME)
DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY)

int X509_cmp_time(const ASN1_TIME *s, time_t *t);
int X509_cmp_current_time(const ASN1_TIME *s);
int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm,
                       const ASN1_TIME *start, const ASN1_TIME *end);
ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t);
ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s,
                            int offset_day, long offset_sec, time_t *t);
ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj);

const char *X509_get_default_cert_area(void);
const char *X509_get_default_cert_dir(void);
const char *X509_get_default_cert_file(void);
const char *X509_get_default_cert_dir_env(void);
const char *X509_get_default_cert_file_env(void);
const char *X509_get_default_private_dir(void);

X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey);

DECLARE_ASN1_FUNCTIONS(X509_ALGOR)
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS)
DECLARE_ASN1_FUNCTIONS(X509_VAL)

DECLARE_ASN1_FUNCTIONS(X509_PUBKEY)

X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key);
EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key);
int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain);
long X509_get_pathlen(X509 *x);
DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY)
EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length,
                        OSSL_LIB_CTX *libctx, const char *propq);
# ifndef OPENSSL_NO_DEPRECATED_3_0
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY)
# endif
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  ifndef OPENSSL_NO_DSA
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY)
#  endif
# endif
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  ifndef OPENSSL_NO_EC
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY)
#  endif
# endif

DECLARE_ASN1_FUNCTIONS(X509_SIG)
void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg,
                   const ASN1_OCTET_STRING **pdigest);
void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg,
                   ASN1_OCTET_STRING **pdigest);

DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO)
DECLARE_ASN1_FUNCTIONS(X509_REQ)
X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq);

DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE)
X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value);

DECLARE_ASN1_FUNCTIONS(X509_EXTENSION)
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS)

DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY)

DECLARE_ASN1_FUNCTIONS(X509_NAME)

int X509_NAME_set(X509_NAME **xn, const X509_NAME *name);

DECLARE_ASN1_FUNCTIONS(X509_CINF)
DECLARE_ASN1_FUNCTIONS(X509)
X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX)

#define X509_get_ex_new_index(l, p, newf, dupf, freef) \
    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef)
int X509_set_ex_data(X509 *r, int idx, void *arg);
void *X509_get_ex_data(const X509 *r, int idx);
DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX)

int i2d_re_X509_tbs(X509 *x, unsigned char **pp);

int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid,
                      int *secbits, uint32_t *flags);
void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid,
                       int secbits, uint32_t flags);

int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits,
                            uint32_t *flags);

void X509_get0_signature(const ASN1_BIT_STRING **psig,
                         const X509_ALGOR **palg, const X509 *x);
int X509_get_signature_nid(const X509 *x);

void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id);
ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x);
void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id);
ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x);

int X509_alias_set1(X509 *x, const unsigned char *name, int len);
int X509_keyid_set1(X509 *x, const unsigned char *id, int len);
unsigned char *X509_alias_get0(X509 *x, int *len);
unsigned char *X509_keyid_get0(X509 *x, int *len);

DECLARE_ASN1_FUNCTIONS(X509_REVOKED)
DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO)
DECLARE_ASN1_FUNCTIONS(X509_CRL)
X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq);

int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
int X509_CRL_get0_by_serial(X509_CRL *crl,
                            X509_REVOKED **ret, const ASN1_INTEGER *serial);
int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x);

X509_PKEY *X509_PKEY_new(void);
void X509_PKEY_free(X509_PKEY *a);

DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI)
DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC)
DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE)

X509_INFO *X509_INFO_new(void);
void X509_INFO_free(X509_INFO *a);
char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size);

#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0
int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1,
                ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey);
OSSL_DEPRECATEDIN_3_0
int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data,
                unsigned char *md, unsigned int *len);
OSSL_DEPRECATEDIN_3_0
int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2,
              ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey,
              const EVP_MD *type);
#endif
int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data,
                     unsigned char *md, unsigned int *len);
int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg,
                     const ASN1_BIT_STRING *signature, const void *data,
                     EVP_PKEY *pkey);
int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg,
                         const ASN1_BIT_STRING *signature, const void *data,
                         EVP_MD_CTX *ctx);
int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2,
                   ASN1_BIT_STRING *signature, const void *data,
                   EVP_PKEY *pkey, const EVP_MD *md);
int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1,
                       X509_ALGOR *algor2, ASN1_BIT_STRING *signature,
                       const void *data, EVP_MD_CTX *ctx);

#define X509_VERSION_1 0
#define X509_VERSION_2 1
#define X509_VERSION_3 2

long X509_get_version(const X509 *x);
int X509_set_version(X509 *x, long version);
int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial);
ASN1_INTEGER *X509_get_serialNumber(X509 *x);
const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x);
int X509_set_issuer_name(X509 *x, const X509_NAME *name);
X509_NAME *X509_get_issuer_name(const X509 *a);
int X509_set_subject_name(X509 *x, const X509_NAME *name);
X509_NAME *X509_get_subject_name(const X509 *a);
const ASN1_TIME * X509_get0_notBefore(const X509 *x);
ASN1_TIME *X509_getm_notBefore(const X509 *x);
int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm);
const ASN1_TIME *X509_get0_notAfter(const X509 *x);
ASN1_TIME *X509_getm_notAfter(const X509 *x);
int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm);
int X509_set_pubkey(X509 *x, EVP_PKEY *pkey);
int X509_up_ref(X509 *x);
int X509_get_signature_type(const X509 *x);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define X509_get_notBefore X509_getm_notBefore
#  define X509_get_notAfter X509_getm_notAfter
#  define X509_set_notBefore X509_set1_notBefore
#  define X509_set_notAfter X509_set1_notAfter
#endif


/*
 * This one is only used so that a binary form can output, as in
 * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf)
 */
X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x);
const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x);
void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid,
                    const ASN1_BIT_STRING **psuid);
const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x);

EVP_PKEY *X509_get0_pubkey(const X509 *x);
EVP_PKEY *X509_get_pubkey(X509 *x);
ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x);

#define X509_REQ_VERSION_1 0

long X509_REQ_get_version(const X509_REQ *req);
int X509_REQ_set_version(X509_REQ *x, long version);
X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req);
int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name);
void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig,
                             const X509_ALGOR **palg);
void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig);
int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg);
int X509_REQ_get_signature_nid(const X509_REQ *req);
int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp);
int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey);
EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req);
EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req);
X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req);
int X509_REQ_extension_nid(int nid);
int *X509_REQ_get_extension_nids(void);
void X509_REQ_set_extension_nids(int *nids);
STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req);
int X509_REQ_add_extensions_nid(X509_REQ *req,
                                const STACK_OF(X509_EXTENSION) *exts, int nid);
int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext);
int X509_REQ_get_attr_count(const X509_REQ *req);
int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos);
int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj,
                             int lastpos);
X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc);
X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);
int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr);
int X509_REQ_add1_attr_by_OBJ(X509_REQ *req,
                              const ASN1_OBJECT *obj, int type,
                              const unsigned char *bytes, int len);
int X509_REQ_add1_attr_by_NID(X509_REQ *req,
                              int nid, int type,
                              const unsigned char *bytes, int len);
int X509_REQ_add1_attr_by_txt(X509_REQ *req,
                              const char *attrname, int type,
                              const unsigned char *bytes, int len);

#define X509_CRL_VERSION_1 0
#define X509_CRL_VERSION_2 1

int X509_CRL_set_version(X509_CRL *x, long version);
int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name);
int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm);
int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm);
int X509_CRL_sort(X509_CRL *crl);
int X509_CRL_up_ref(X509_CRL *crl);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate
#  define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate
#endif

long X509_CRL_get_version(const X509_CRL *crl);
const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl);
const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl);
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl);
OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl);
#endif
X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl);
const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl);
STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl);
void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig,
                             const X509_ALGOR **palg);
int X509_CRL_get_signature_nid(const X509_CRL *crl);
int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp);

const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x);
int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial);
const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x);
int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);
const STACK_OF(X509_EXTENSION) *
X509_REVOKED_get0_extensions(const X509_REVOKED *r);

X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer,
                        EVP_PKEY *skey, const EVP_MD *md, unsigned int flags);

int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey);

int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey);
int X509_chain_check_suiteb(int *perror_depth,
                            X509 *x, STACK_OF(X509) *chain,
                            unsigned long flags);
int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags);
STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain);

int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);
unsigned long X509_issuer_and_serial_hash(X509 *a);

int X509_issuer_name_cmp(const X509 *a, const X509 *b);
unsigned long X509_issuer_name_hash(X509 *a);

int X509_subject_name_cmp(const X509 *a, const X509 *b);
unsigned long X509_subject_name_hash(X509 *x);

# ifndef OPENSSL_NO_MD5
unsigned long X509_issuer_name_hash_old(X509 *a);
unsigned long X509_subject_name_hash_old(X509 *x);
# endif

# define X509_ADD_FLAG_DEFAULT  0
# define X509_ADD_FLAG_UP_REF   0x1
# define X509_ADD_FLAG_PREPEND  0x2
# define X509_ADD_FLAG_NO_DUP   0x4
# define X509_ADD_FLAG_NO_SS    0x8
int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags);
int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags);

int X509_cmp(const X509 *a, const X509 *b);
int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);
#ifndef OPENSSL_NO_DEPRECATED_3_0
# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL)
OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x,
                                                const EVP_PKEY *pubkey);
#endif
unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx,
                                const char *propq, int *ok);
unsigned long X509_NAME_hash_old(const X509_NAME *x);

int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);
int X509_CRL_match(const X509_CRL *a, const X509_CRL *b);
int X509_aux_print(BIO *out, X509 *x, int indent);
# ifndef OPENSSL_NO_STDIO
int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag,
                     unsigned long cflag);
int X509_print_fp(FILE *bp, X509 *x);
int X509_CRL_print_fp(FILE *bp, X509_CRL *x);
int X509_REQ_print_fp(FILE *bp, X509_REQ *req);
int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent,
                          unsigned long flags);
# endif

int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase);
int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent,
                       unsigned long flags);
int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag,
                  unsigned long cflag);
int X509_print(BIO *bp, X509 *x);
int X509_ocspid_print(BIO *bp, X509 *x);
int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag);
int X509_CRL_print(BIO *bp, X509_CRL *x);
int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag,
                      unsigned long cflag);
int X509_REQ_print(BIO *bp, X509_REQ *req);

int X509_NAME_entry_count(const X509_NAME *name);
int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid,
                              char *buf, int len);
int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                              char *buf, int len);

/*
 * NOTE: you should be passing -1, not 0 as lastpos. The functions that use
 * lastpos, search after that position on.
 */
int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos);
int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                               int lastpos);
X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc);
X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);
int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne,
                        int loc, int set);
int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
                                               const char *field, int type,
                                               const unsigned char *bytes,
                                               int len);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
                                               int type,
                                               const unsigned char *bytes,
                                               int len);
int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
                                               const ASN1_OBJECT *obj, int type,
                                               const unsigned char *bytes,
                                               int len);
int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj);
int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
                             const unsigned char *bytes, int len);
ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne);
ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne);
int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne);

int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder,
                       size_t *pderlen);

int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x);
int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x,
                          int nid, int lastpos);
int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x,
                          const ASN1_OBJECT *obj, int lastpos);
int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x,
                               int crit, int lastpos);
X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc);
X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc);
STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,
                                         X509_EXTENSION *ex, int loc);

int X509_get_ext_count(const X509 *x);
int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos);
int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos);
int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos);
X509_EXTENSION *X509_get_ext(const X509 *x, int loc);
X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx);
int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit,
                      unsigned long flags);

int X509_CRL_get_ext_count(const X509_CRL *x);
int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos);
int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj,
                            int lastpos);
int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos);
X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc);
X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);
int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);
void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx);
int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit,
                          unsigned long flags);

int X509_REVOKED_get_ext_count(const X509_REVOKED *x);
int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos);
int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj,
                                int lastpos);
int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit,
                                     int lastpos);
X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc);
X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);
int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);
void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit,
                               int *idx);
int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit,
                              unsigned long flags);

X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
                                             int nid, int crit,
                                             ASN1_OCTET_STRING *data);
X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex,
                                             const ASN1_OBJECT *obj, int crit,
                                             ASN1_OCTET_STRING *data);
int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj);
int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit);
int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data);
ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex);
ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne);
int X509_EXTENSION_get_critical(const X509_EXTENSION *ex);

int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x);
int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid,
                           int lastpos);
int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk,
                           const ASN1_OBJECT *obj, int lastpos);
X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc);
X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
                                           X509_ATTRIBUTE *attr);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE)
                                                  **x, const ASN1_OBJECT *obj,
                                                  int type,
                                                  const unsigned char *bytes,
                                                  int len);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE)
                                                  **x, int nid, int type,
                                                  const unsigned char *bytes,
                                                  int len);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE)
                                                  **x, const char *attrname,
                                                  int type,
                                                  const unsigned char *bytes,
                                                  int len);
void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x,
                              const ASN1_OBJECT *obj, int lastpos, int type);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
                                             int atrtype, const void *data,
                                             int len);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
                                             const ASN1_OBJECT *obj,
                                             int atrtype, const void *data,
                                             int len);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,
                                             const char *atrname, int type,
                                             const unsigned char *bytes,
                                             int len);
int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj);
int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
                             const void *data, int len);
void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype,
                               void *data);
int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr);
ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr);
ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx);

int EVP_PKEY_get_attr_count(const EVP_PKEY *key);
int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos);
int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj,
                             int lastpos);
X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc);
X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc);
int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr);
int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key,
                              const ASN1_OBJECT *obj, int type,
                              const unsigned char *bytes, int len);
int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key,
                              int nid, int type,
                              const unsigned char *bytes, int len);
int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key,
                              const char *attrname, int type,
                              const unsigned char *bytes, int len);

/* lookup a cert from a X509 STACK */
X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name,
                                     const ASN1_INTEGER *serial);
X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name);

DECLARE_ASN1_FUNCTIONS(PBEPARAM)
DECLARE_ASN1_FUNCTIONS(PBE2PARAM)
DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM)
#ifndef OPENSSL_NO_SCRYPT
DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS)
#endif

int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter,
                         const unsigned char *salt, int saltlen);
int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter,
                            const unsigned char *salt, int saltlen,
                            OSSL_LIB_CTX *libctx);

X509_ALGOR *PKCS5_pbe_set(int alg, int iter,
                          const unsigned char *salt, int saltlen);
X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter,
                             const unsigned char *salt, int saltlen,
                             OSSL_LIB_CTX *libctx);

X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
                           unsigned char *salt, int saltlen);
X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter,
                              unsigned char *salt, int saltlen,
                              unsigned char *aiv, int prf_nid);
X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter,
                                 unsigned char *salt, int saltlen,
                                 unsigned char *aiv, int prf_nid,
                                 OSSL_LIB_CTX *libctx);

#ifndef OPENSSL_NO_SCRYPT
X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher,
                                  const unsigned char *salt, int saltlen,
                                  unsigned char *aiv, uint64_t N, uint64_t r,
                                  uint64_t p);
#endif

X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen,
                             int prf_nid, int keylen);
X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen,
                                int prf_nid, int keylen,
                                OSSL_LIB_CTX *libctx);

/* PKCS#8 utilities */

DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO)

EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8);
EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx,
                            const char *propq);
PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey);

int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj,
                    int version, int ptype, void *pval,
                    unsigned char *penc, int penclen);
int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg,
                    const unsigned char **pk, int *ppklen,
                    const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8);

const STACK_OF(X509_ATTRIBUTE) *
PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8);
int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr);
int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type,
                                const unsigned char *bytes, int len);
int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj,
                                int type, const unsigned char *bytes, int len);


int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
                           int ptype, void *pval,
                           unsigned char *penc, int penclen);
int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
                           const unsigned char **pk, int *ppklen,
                           X509_ALGOR **pa, const X509_PUBKEY *pub);
int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b);

# ifdef  __cplusplus
}
# endif
#endif
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    /*
 * WARNING: do not edit!
 * Generated by Makefile from include/openssl/x509.h.in
 *
 * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */



#ifndef OPENSSL_X509_H
# define OPENSSL_X509_H
# pragma once

# include <openssl/macros.h>
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define HEADER_X509_H
# endif

# include <openssl/e_os2.h>
# include <openssl/types.h>
# include <openssl/symhacks.h>
# include <openssl/buffer.h>
# include <openssl/evp.h>
# include <openssl/bio.h>
# include <openssl/asn1.h>
# include <openssl/safestack.h>
# include <openssl/ec.h>

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  include <openssl/rsa.h>
#  include <openssl/dsa.h>
#  include <openssl/dh.h>
# endif

# include <openssl/sha.h>
# include <openssl/x509err.h>

#ifdef  __cplusplus
extern "C" {
#endif

/* Needed stacks for types defined in other headers */
SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME)
#define sk_X509_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_value(sk, idx) ((X509_NAME *)OPENSSL_sk_value(ossl_check_const_X509_NAME_sk_type(sk), (idx)))
#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp)))
#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n)))
#define sk_X509_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_sk_type(sk), (n))
#define sk_X509_NAME_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_delete(sk, i) ((X509_NAME *)OPENSSL_sk_delete(ossl_check_X509_NAME_sk_type(sk), (i)))
#define sk_X509_NAME_delete_ptr(sk, ptr) ((X509_NAME *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_pop(sk) ((X509_NAME *)OPENSSL_sk_pop(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_shift(sk) ((X509_NAME *)OPENSSL_sk_shift(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk),ossl_check_X509_NAME_freefunc_type(freefunc))
#define sk_X509_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), (idx))
#define sk_X509_NAME_set(sk, idx, ptr) ((X509_NAME *)OPENSSL_sk_set(ossl_check_X509_NAME_sk_type(sk), (idx), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), pnum)
#define sk_X509_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_dup(sk) ((STACK_OF(X509_NAME) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_sk_type(sk), ossl_check_X509_NAME_copyfunc_type(copyfunc), ossl_check_X509_NAME_freefunc_type(freefunc)))
#define sk_X509_NAME_set_cmp_func(sk, cmp) ((sk_X509_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509)
#define sk_X509_num(sk) OPENSSL_sk_num(ossl_check_const_X509_sk_type(sk))
#define sk_X509_value(sk, idx) ((X509 *)OPENSSL_sk_value(ossl_check_const_X509_sk_type(sk), (idx)))
#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp)))
#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_new_null())
#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n)))
#define sk_X509_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_sk_type(sk), (n))
#define sk_X509_free(sk) OPENSSL_sk_free(ossl_check_X509_sk_type(sk))
#define sk_X509_zero(sk) OPENSSL_sk_zero(ossl_check_X509_sk_type(sk))
#define sk_X509_delete(sk, i) ((X509 *)OPENSSL_sk_delete(ossl_check_X509_sk_type(sk), (i)))
#define sk_X509_delete_ptr(sk, ptr) ((X509 *)OPENSSL_sk_delete_ptr(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)))
#define sk_X509_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_pop(sk) ((X509 *)OPENSSL_sk_pop(ossl_check_X509_sk_type(sk)))
#define sk_X509_shift(sk) ((X509 *)OPENSSL_sk_shift(ossl_check_X509_sk_type(sk)))
#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk),ossl_check_X509_freefunc_type(freefunc))
#define sk_X509_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), (idx))
#define sk_X509_set(sk, idx, ptr) ((X509 *)OPENSSL_sk_set(ossl_check_X509_sk_type(sk), (idx), ossl_check_X509_type(ptr)))
#define sk_X509_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), pnum)
#define sk_X509_sort(sk) OPENSSL_sk_sort(ossl_check_X509_sk_type(sk))
#define sk_X509_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_sk_type(sk))
#define sk_X509_dup(sk) ((STACK_OF(X509) *)OPENSSL_sk_dup(ossl_check_const_X509_sk_type(sk)))
#define sk_X509_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_sk_type(sk), ossl_check_X509_copyfunc_type(copyfunc), ossl_check_X509_freefunc_type(freefunc)))
#define sk_X509_set_cmp_func(sk, cmp) ((sk_X509_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_sk_type(sk), ossl_check_X509_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED)
#define sk_X509_REVOKED_num(sk) OPENSSL_sk_num(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_value(sk, idx) ((X509_REVOKED *)OPENSSL_sk_value(ossl_check_const_X509_REVOKED_sk_type(sk), (idx)))
#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp)))
#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_null())
#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n)))
#define sk_X509_REVOKED_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_REVOKED_sk_type(sk), (n))
#define sk_X509_REVOKED_free(sk) OPENSSL_sk_free(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_zero(sk) OPENSSL_sk_zero(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_delete(sk, i) ((X509_REVOKED *)OPENSSL_sk_delete(ossl_check_X509_REVOKED_sk_type(sk), (i)))
#define sk_X509_REVOKED_delete_ptr(sk, ptr) ((X509_REVOKED *)OPENSSL_sk_delete_ptr(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_pop(sk) ((X509_REVOKED *)OPENSSL_sk_pop(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_shift(sk) ((X509_REVOKED *)OPENSSL_sk_shift(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk),ossl_check_X509_REVOKED_freefunc_type(freefunc))
#define sk_X509_REVOKED_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), (idx))
#define sk_X509_REVOKED_set(sk, idx, ptr) ((X509_REVOKED *)OPENSSL_sk_set(ossl_check_X509_REVOKED_sk_type(sk), (idx), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), pnum)
#define sk_X509_REVOKED_sort(sk) OPENSSL_sk_sort(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_dup(sk) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_dup(ossl_check_const_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_copyfunc_type(copyfunc), ossl_check_X509_REVOKED_freefunc_type(freefunc)))
#define sk_X509_REVOKED_set_cmp_func(sk, cmp) ((sk_X509_REVOKED_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL)
#define sk_X509_CRL_num(sk) OPENSSL_sk_num(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_value(sk, idx) ((X509_CRL *)OPENSSL_sk_value(ossl_check_const_X509_CRL_sk_type(sk), (idx)))
#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp)))
#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_null())
#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n)))
#define sk_X509_CRL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_CRL_sk_type(sk), (n))
#define sk_X509_CRL_free(sk) OPENSSL_sk_free(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_zero(sk) OPENSSL_sk_zero(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_delete(sk, i) ((X509_CRL *)OPENSSL_sk_delete(ossl_check_X509_CRL_sk_type(sk), (i)))
#define sk_X509_CRL_delete_ptr(sk, ptr) ((X509_CRL *)OPENSSL_sk_delete_ptr(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_pop(sk) ((X509_CRL *)OPENSSL_sk_pop(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_shift(sk) ((X509_CRL *)OPENSSL_sk_shift(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk),ossl_check_X509_CRL_freefunc_type(freefunc))
#define sk_X509_CRL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), (idx))
#define sk_X509_CRL_set(sk, idx, ptr) ((X509_CRL *)OPENSSL_sk_set(ossl_check_X509_CRL_sk_type(sk), (idx), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), pnum)
#define sk_X509_CRL_sort(sk) OPENSSL_sk_sort(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_dup(sk) ((STACK_OF(X509_CRL) *)OPENSSL_sk_dup(ossl_check_const_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_CRL) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_CRL_sk_type(sk), ossl_check_X509_CRL_copyfunc_type(copyfunc), ossl_check_X509_CRL_freefunc_type(freefunc)))
#define sk_X509_CRL_set_cmp_func(sk, cmp) ((sk_X509_CRL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_compfunc_type(cmp)))


/* Flags for X509_get_signature_info() */
/* Signature info is valid */
# define X509_SIG_INFO_VALID     0x1
/* Signature is suitable for TLS use */
# define X509_SIG_INFO_TLS       0x2

# define X509_FILETYPE_PEM       1
# define X509_FILETYPE_ASN1      2
# define X509_FILETYPE_DEFAULT   3

# define X509v3_KU_DIGITAL_SIGNATURE     0x0080
# define X509v3_KU_NON_REPUDIATION       0x0040
# define X509v3_KU_KEY_ENCIPHERMENT      0x0020
# define X509v3_KU_DATA_ENCIPHERMENT     0x0010
# define X509v3_KU_KEY_AGREEMENT         0x0008
# define X509v3_KU_KEY_CERT_SIGN         0x0004
# define X509v3_KU_CRL_SIGN              0x0002
# define X509v3_KU_ENCIPHER_ONLY         0x0001
# define X509v3_KU_DECIPHER_ONLY         0x8000
# define X509v3_KU_UNDEF                 0xffff

struct X509_algor_st {
    ASN1_OBJECT *algorithm;
    ASN1_TYPE *parameter;
} /* X509_ALGOR */ ;

typedef STACK_OF(X509_ALGOR) X509_ALGORS;

typedef struct X509_val_st {
    ASN1_TIME *notBefore;
    ASN1_TIME *notAfter;
} X509_VAL;

typedef struct X509_sig_st X509_SIG;

typedef struct X509_name_entry_st X509_NAME_ENTRY;

SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY)
#define sk_X509_NAME_ENTRY_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_value(sk, idx) ((X509_NAME_ENTRY *)OPENSSL_sk_value(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), (idx)))
#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))
#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n)))
#define sk_X509_NAME_ENTRY_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_ENTRY_sk_type(sk), (n))
#define sk_X509_NAME_ENTRY_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_delete(sk, i) ((X509_NAME_ENTRY *)OPENSSL_sk_delete(ossl_check_X509_NAME_ENTRY_sk_type(sk), (i)))
#define sk_X509_NAME_ENTRY_delete_ptr(sk, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_pop(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_pop(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_shift(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_shift(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk),ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc))
#define sk_X509_NAME_ENTRY_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), (idx))
#define sk_X509_NAME_ENTRY_set(sk, idx, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_set(ossl_check_X509_NAME_ENTRY_sk_type(sk), (idx), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), pnum)
#define sk_X509_NAME_ENTRY_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_dup(sk) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_copyfunc_type(copyfunc), ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)))
#define sk_X509_NAME_ENTRY_set_cmp_func(sk, cmp) ((sk_X509_NAME_ENTRY_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))


# define X509_EX_V_NETSCAPE_HACK         0x8000
# define X509_EX_V_INIT                  0x0001
typedef struct X509_extension_st X509_EXTENSION;
SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION)
#define sk_X509_EXTENSION_num(sk) OPENSSL_sk_num(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_value(sk, idx) ((X509_EXTENSION *)OPENSSL_sk_value(ossl_check_const_X509_EXTENSION_sk_type(sk), (idx)))
#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp)))
#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_null())
#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n)))
#define sk_X509_EXTENSION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_EXTENSION_sk_type(sk), (n))
#define sk_X509_EXTENSION_free(sk) OPENSSL_sk_free(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_zero(sk) OPENSSL_sk_zero(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_delete(sk, i) ((X509_EXTENSION *)OPENSSL_sk_delete(ossl_check_X509_EXTENSION_sk_type(sk), (i)))
#define sk_X509_EXTENSION_delete_ptr(sk, ptr) ((X509_EXTENSION *)OPENSSL_sk_delete_ptr(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_pop(sk) ((X509_EXTENSION *)OPENSSL_sk_pop(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_shift(sk) ((X509_EXTENSION *)OPENSSL_sk_shift(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk),ossl_check_X509_EXTENSION_freefunc_type(freefunc))
#define sk_X509_EXTENSION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), (idx))
#define sk_X509_EXTENSION_set(sk, idx, ptr) ((X509_EXTENSION *)OPENSSL_sk_set(ossl_check_X509_EXTENSION_sk_type(sk), (idx), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), pnum)
#define sk_X509_EXTENSION_sort(sk) OPENSSL_sk_sort(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_dup(sk) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_dup(ossl_check_const_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_copyfunc_type(copyfunc), ossl_check_X509_EXTENSION_freefunc_type(freefunc)))
#define sk_X509_EXTENSION_set_cmp_func(sk, cmp) ((sk_X509_EXTENSION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_compfunc_type(cmp)))

typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS;
typedef struct x509_attributes_st X509_ATTRIBUTE;
SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE)
#define sk_X509_ATTRIBUTE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_value(sk, idx) ((X509_ATTRIBUTE *)OPENSSL_sk_value(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), (idx)))
#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))
#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_null())
#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n)))
#define sk_X509_ATTRIBUTE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ATTRIBUTE_sk_type(sk), (n))
#define sk_X509_ATTRIBUTE_free(sk) OPENSSL_sk_free(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_delete(sk, i) ((X509_ATTRIBUTE *)OPENSSL_sk_delete(ossl_check_X509_ATTRIBUTE_sk_type(sk), (i)))
#define sk_X509_ATTRIBUTE_delete_ptr(sk, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_delete_ptr(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_pop(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_pop(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_shift(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_shift(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk),ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc))
#define sk_X509_ATTRIBUTE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), (idx))
#define sk_X509_ATTRIBUTE_set(sk, idx, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_set(ossl_check_X509_ATTRIBUTE_sk_type(sk), (idx), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), pnum)
#define sk_X509_ATTRIBUTE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_dup(sk) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_dup(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_copyfunc_type(copyfunc), ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)))
#define sk_X509_ATTRIBUTE_set_cmp_func(sk, cmp) ((sk_X509_ATTRIBUTE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))

typedef struct X509_req_info_st X509_REQ_INFO;
typedef struct X509_req_st X509_REQ;
typedef struct x509_cert_aux_st X509_CERT_AUX;
typedef struct x509_cinf_st X509_CINF;

/* Flags for X509_print_ex() */

# define X509_FLAG_COMPAT                0
# define X509_FLAG_NO_HEADER             1L
# define X509_FLAG_NO_VERSION            (1L << 1)
# define X509_FLAG_NO_SERIAL             (1L << 2)
# define X509_FLAG_NO_SIGNAME            (1L << 3)
# define X509_FLAG_NO_ISSUER             (1L << 4)
# define X509_FLAG_NO_VALIDITY           (1L << 5)
# define X509_FLAG_NO_SUBJECT            (1L << 6)
# define X509_FLAG_NO_PUBKEY             (1L << 7)
# define X509_FLAG_NO_EXTENSIONS         (1L << 8)
# define X509_FLAG_NO_SIGDUMP            (1L << 9)
# define X509_FLAG_NO_AUX                (1L << 10)
# define X509_FLAG_NO_ATTRIBUTES         (1L << 11)
# define X509_FLAG_NO_IDS                (1L << 12)
# define X509_FLAG_EXTENSIONS_ONLY_KID   (1L << 13)

/* Flags specific to X509_NAME_print_ex() */

/* The field separator information */

# define XN_FLAG_SEP_MASK        (0xf << 16)

# define XN_FLAG_COMPAT          0/* Traditional; use old X509_NAME_print */
# define XN_FLAG_SEP_COMMA_PLUS  (1 << 16)/* RFC2253 ,+ */
# define XN_FLAG_SEP_CPLUS_SPC   (2 << 16)/* ,+ spaced: more readable */
# define XN_FLAG_SEP_SPLUS_SPC   (3 << 16)/* ;+ spaced */
# define XN_FLAG_SEP_MULTILINE   (4 << 16)/* One line per field */

# define XN_FLAG_DN_REV          (1 << 20)/* Reverse DN order */

/* How the field name is shown */

# define XN_FLAG_FN_MASK         (0x3 << 21)

# define XN_FLAG_FN_SN           0/* Object short name */
# define XN_FLAG_FN_LN           (1 << 21)/* Object long name */
# define XN_FLAG_FN_OID          (2 << 21)/* Always use OIDs */
# define XN_FLAG_FN_NONE         (3 << 21)/* No field names */

# define XN_FLAG_SPC_EQ          (1 << 23)/* Put spaces round '=' */

/*
 * This determines if we dump fields we don't recognise: RFC2253 requires
 * this.
 */

# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24)

# define XN_FLAG_FN_ALIGN        (1 << 25)/* Align field names to 20
                                           * characters */

/* Complete set of RFC2253 flags */

# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \
                        XN_FLAG_SEP_COMMA_PLUS | \
                        XN_FLAG_DN_REV | \
                        XN_FLAG_FN_SN | \
                        XN_FLAG_DUMP_UNKNOWN_FIELDS)

/* readable oneline form */

# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \
                        ASN1_STRFLGS_ESC_QUOTE | \
                        XN_FLAG_SEP_CPLUS_SPC | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_SN)

/* readable multiline form */

# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \
                        ASN1_STRFLGS_ESC_MSB | \
                        XN_FLAG_SEP_MULTILINE | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_LN | \
                        XN_FLAG_FN_ALIGN)

typedef struct X509_crl_info_st X509_CRL_INFO;

typedef struct private_key_st {
    int version;
    /* The PKCS#8 data types */
    X509_ALGOR *enc_algor;
    ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */
    /* When decrypted, the following will not be NULL */
    EVP_PKEY *dec_pkey;
    /* used to encrypt and decrypt */
    int key_length;
    char *key_data;
    int key_free;               /* true if we should auto free key_data */
    /* expanded version of 'enc_algor' */
    EVP_CIPHER_INFO cipher;
} X509_PKEY;

typedef struct X509_info_st {
    X509 *x509;
    X509_CRL *crl;
    X509_PKEY *x_pkey;
    EVP_CIPHER_INFO enc_cipher;
    int enc_len;
    char *enc_data;
} X509_INFO;
SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO)
#define sk_X509_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_value(sk, idx) ((X509_INFO *)OPENSSL_sk_value(ossl_check_const_X509_INFO_sk_type(sk), (idx)))
#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp)))
#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_null())
#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n)))
#define sk_X509_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_INFO_sk_type(sk), (n))
#define sk_X509_INFO_free(sk) OPENSSL_sk_free(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_delete(sk, i) ((X509_INFO *)OPENSSL_sk_delete(ossl_check_X509_INFO_sk_type(sk), (i)))
#define sk_X509_INFO_delete_ptr(sk, ptr) ((X509_INFO *)OPENSSL_sk_delete_ptr(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_pop(sk) ((X509_INFO *)OPENSSL_sk_pop(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_shift(sk) ((X509_INFO *)OPENSSL_sk_shift(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk),ossl_check_X509_INFO_freefunc_type(freefunc))
#define sk_X509_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), (idx))
#define sk_X509_INFO_set(sk, idx, ptr) ((X509_INFO *)OPENSSL_sk_set(ossl_check_X509_INFO_sk_type(sk), (idx), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), pnum)
#define sk_X509_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_dup(sk) ((STACK_OF(X509_INFO) *)OPENSSL_sk_dup(ossl_check_const_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_INFO_sk_type(sk), ossl_check_X509_INFO_copyfunc_type(copyfunc), ossl_check_X509_INFO_freefunc_type(freefunc)))
#define sk_X509_INFO_set_cmp_func(sk, cmp) ((sk_X509_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_compfunc_type(cmp)))


/*
 * The next 2 structures and their 8 routines are used to manipulate Netscape's
 * spki structures - useful if you are writing a CA web page
 */
typedef struct Netscape_spkac_st {
    X509_PUBKEY *pubkey;
    ASN1_IA5STRING *challenge;  /* challenge sent in atlas >= PR2 */
} NETSCAPE_SPKAC;

typedef struct Netscape_spki_st {
    NETSCAPE_SPKAC *spkac;      /* signed public key and challenge */
    X509_ALGOR sig_algor;
    ASN1_BIT_STRING *signature;
} NETSCAPE_SPKI;

/* Netscape certificate sequence structure */
typedef struct Netscape_certificate_sequence {
    ASN1_OBJECT *type;
    STACK_OF(X509) *certs;
} NETSCAPE_CERT_SEQUENCE;

/*- Unused (and iv length is wrong)
typedef struct CBCParameter_st
        {
        unsigned char iv[8];
        } CBC_PARAM;
*/

/* Password based encryption structure */

typedef struct PBEPARAM_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *iter;
} PBEPARAM;

/* Password based encryption V2 structures */

typedef struct PBE2PARAM_st {
    X509_ALGOR *keyfunc;
    X509_ALGOR *encryption;
} PBE2PARAM;

typedef struct PBKDF2PARAM_st {
/* Usually OCTET STRING but could be anything */
    ASN1_TYPE *salt;
    ASN1_INTEGER *iter;
    ASN1_INTEGER *keylength;
    X509_ALGOR *prf;
} PBKDF2PARAM;

#ifndef OPENSSL_NO_SCRYPT
typedef struct SCRYPT_PARAMS_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *costParameter;
    ASN1_INTEGER *blockSize;
    ASN1_INTEGER *parallelizationParameter;
    ASN1_INTEGER *keyLength;
} SCRYPT_PARAMS;
#endif

#ifdef  __cplusplus
}
#endif

# include <openssl/x509_vfy.h>
# include <openssl/pkcs7.h>

#ifdef  __cplusplus
extern "C" {
#endif

# define X509_EXT_PACK_UNKNOWN   1
# define X509_EXT_PACK_STRING    2

# define         X509_extract_key(x)     X509_get_pubkey(x)/*****/
# define         X509_REQ_extract_key(a) X509_REQ_get_pubkey(a)
# define         X509_name_cmp(a,b)      X509_NAME_cmp((a),(b))

void X509_CRL_set_default_method(const X509_CRL_METHOD *meth);
X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl),
                                     int (*crl_free) (X509_CRL *crl),
                                     int (*crl_lookup) (X509_CRL *crl,
                                                        X509_REVOKED **ret,
                                                        const
                                                        ASN1_INTEGER *serial,
                                                        const
                                                        X509_NAME *issuer),
                                     int (*crl_verify) (X509_CRL *crl,
                                                        EVP_PKEY *pk));
void X509_CRL_METHOD_free(X509_CRL_METHOD *m);

void X509_CRL_set_meth_data(X509_CRL *crl, void *dat);
void *X509_CRL_get_meth_data(X509_CRL *crl);

const char *X509_verify_cert_error_string(long n);

int X509_verify(X509 *a, EVP_PKEY *r);
int X509_self_signed(X509 *cert, int verify_signature);

int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx,
                       const char *propq);
int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r);
int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r);
int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r);

NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len);
char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x);
EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x);
int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey);

int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki);

int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent);
int X509_signature_print(BIO *bp, const X509_ALGOR *alg,
                         const ASN1_STRING *sig);

int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx);
int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx);
int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx);
int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md);

int X509_pubkey_digest(const X509 *data, const EVP_MD *type,
                       unsigned char *md, unsigned int *len);
int X509_digest(const X509 *data, const EVP_MD *type,
                unsigned char *md, unsigned int *len);
ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert,
                                   EVP_MD **md_used, int *md_is_fallback);
int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type,
                    unsigned char *md, unsigned int *len);
int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type,
                    unsigned char *md, unsigned int *len);
int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type,
                     unsigned char *md, unsigned int *len);

X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout);
X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout);
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  include <openssl/http.h> /* OSSL_HTTP_REQ_CTX_nbio_d2i */
#  define X509_http_nbio(rctx, pcert) \
      OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509))
#  define X509_CRL_http_nbio(rctx, pcrl) \
      OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL))
# endif

# ifndef OPENSSL_NO_STDIO
X509 *d2i_X509_fp(FILE *fp, X509 **x509);
int i2d_X509_fp(FILE *fp, const X509 *x509);
X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl);
int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl);
X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req);
int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req);
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa);
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_DSA
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa);
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa);
#   endif
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_EC
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey);
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey);
#   endif /* OPENSSL_NO_EC */
#  endif /* OPENSSL_NO_DEPRECATED_3_0 */
X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8);
int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8);
X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk);
int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk);
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,
                                                PKCS8_PRIV_KEY_INFO **p8inf);
int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf);
int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key);
int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx,
                               const char *propq);
EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a);
int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
# endif

X509 *d2i_X509_bio(BIO *bp, X509 **x509);
int i2d_X509_bio(BIO *bp, const X509 *x509);
X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl);
int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl);
X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req);
int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req);
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa);
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_DSA
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa);
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa);
#   endif
#  endif

#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_EC
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey);
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey);
#   endif /* OPENSSL_NO_EC */
#  endif /* OPENSSL_NO_DEPRECATED_3_0 */

X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8);
int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8);
X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk);
int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk);
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
                                                 PKCS8_PRIV_KEY_INFO **p8inf);
int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf);
int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key);
int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx,
                                const char *propq);
EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);

DECLARE_ASN1_DUP_FUNCTION(X509)
DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR)
DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE)
DECLARE_ASN1_DUP_FUNCTION(X509_CRL)
DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION)
DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY)
DECLARE_ASN1_DUP_FUNCTION(X509_REQ)
DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED)
int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype,
                    void *pval);
void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype,
                     const void **ppval, const X509_ALGOR *algor);
void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);
int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b);
int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src);

DECLARE_ASN1_DUP_FUNCTION(X509_NAME)
DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY)

int X509_cmp_time(const ASN1_TIME *s, time_t *t);
int X509_cmp_current_time(const ASN1_TIME *s);
int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm,
                       const ASN1_TIME *start, const ASN1_TIME *end);
ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t);
ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s,
                            int offset_day, long offset_sec, time_t *t);
ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj);

const char *X509_get_default_cert_area(void);
const char *X509_get_default_cert_dir(void);
const char *X509_get_default_cert_file(void);
const char *X509_get_default_cert_dir_env(void);
const char *X509_get_default_cert_file_env(void);
const char *X509_get_default_private_dir(void);

X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey);

DECLARE_ASN1_FUNCTIONS(X509_ALGOR)
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS)
DECLARE_ASN1_FUNCTIONS(X509_VAL)

DECLARE_ASN1_FUNCTIONS(X509_PUBKEY)

X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key);
EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key);
int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain);
long X509_get_pathlen(X509 *x);
DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY)
EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length,
                        OSSL_LIB_CTX *libctx, const char *propq);
# ifndef OPENSSL_NO_DEPRECATED_3_0
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY)
# endif
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  ifndef OPENSSL_NO_DSA
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY)
#  endif
# endif
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  ifndef OPENSSL_NO_EC
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY)
#  endif
# endif

DECLARE_ASN1_FUNCTIONS(X509_SIG)
void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg,
                   const ASN1_OCTET_STRING **pdigest);
void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg,
                   ASN1_OCTET_STRING **pdigest);

DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO)
DECLARE_ASN1_FUNCTIONS(X509_REQ)
X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq);

DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE)
X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value);

DECLARE_ASN1_FUNCTIONS(X509_EXTENSION)
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS)

DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY)

DECLARE_ASN1_FUNCTIONS(X509_NAME)

int X509_NAME_set(X509_NAME **xn, const X509_NAME *name);

DECLARE_ASN1_FUNCTIONS(X509_CINF)
DECLARE_ASN1_FUNCTIONS(X509)
X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX)

#define X509_get_ex_new_index(l, p, newf, dupf, freef) \
    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef)
int X509_set_ex_data(X509 *r, int idx, void *arg);
void *X509_get_ex_data(const X509 *r, int idx);
DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX)

int i2d_re_X509_tbs(X509 *x, unsigned char **pp);

int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid,
                      int *secbits, uint32_t *flags);
void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid,
                       int secbits, uint32_t flags);

int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits,
                            uint32_t *flags);

void X509_get0_signature(const ASN1_BIT_STRING **psig,
                         const X509_ALGOR **palg, const X509 *x);
int X509_get_signature_nid(const X509 *x);

void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id);
ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x);
void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id);
ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x);

int X509_alias_set1(X509 *x, const unsigned char *name, int len);
int X509_keyid_set1(X509 *x, const unsigned char *id, int len);
unsigned char *X509_alias_get0(X509 *x, int *len);
unsigned char *X509_keyid_get0(X509 *x, int *len);

DECLARE_ASN1_FUNCTIONS(X509_REVOKED)
DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO)
DECLARE_ASN1_FUNCTIONS(X509_CRL)
X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq);

int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
int X509_CRL_get0_by_serial(X509_CRL *crl,
                            X509_REVOKED **ret, const ASN1_INTEGER *serial);
int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x);

X509_PKEY *X509_PKEY_new(void);
void X509_PKEY_free(X509_PKEY *a);

DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI)
DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC)
DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE)

X509_INFO *X509_INFO_new(void);
void X509_INFO_free(X509_INFO *a);
char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size);

#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0
int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1,
                ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey);
OSSL_DEPRECATEDIN_3_0
int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data,
                unsigned char *md, unsigned int *len);
OSSL_DEPRECATEDIN_3_0
int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2,
              ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey,
              const EVP_MD *type);
#endif
int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data,
                     unsigned char *md, unsigned int *len);
int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg,
                     const ASN1_BIT_STRING *signature, const void *data,
                     EVP_PKEY *pkey);
int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg,
                         const ASN1_BIT_STRING *signature, const void *data,
                         EVP_MD_CTX *ctx);
int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2,
                   ASN1_BIT_STRING *signature, const void *data,
                   EVP_PKEY *pkey, const EVP_MD *md);
int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1,
                       X509_ALGOR *algor2, ASN1_BIT_STRING *signature,
                       const void *data, EVP_MD_CTX *ctx);

#define X509_VERSION_1 0
#define X509_VERSION_2 1
#define X509_VERSION_3 2

long X509_get_version(const X509 *x);
int X509_set_version(X509 *x, long version);
int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial);
ASN1_INTEGER *X509_get_serialNumber(X509 *x);
const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x);
int X509_set_issuer_name(X509 *x, const X509_NAME *name);
X509_NAME *X509_get_issuer_name(const X509 *a);
int X509_set_subject_name(X509 *x, const X509_NAME *name);
X509_NAME *X509_get_subject_name(const X509 *a);
const ASN1_TIME * X509_get0_notBefore(const X509 *x);
ASN1_TIME *X509_getm_notBefore(const X509 *x);
int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm);
const ASN1_TIME *X509_get0_notAfter(const X509 *x);
ASN1_TIME *X509_getm_notAfter(const X509 *x);
int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm);
int X509_set_pubkey(X509 *x, EVP_PKEY *pkey);
int X509_up_ref(X509 *x);
int X509_get_signature_type(const X509 *x);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define X509_get_notBefore X509_getm_notBefore
#  define X509_get_notAfter X509_getm_notAfter
#  define X509_set_notBefore X509_set1_notBefore
#  define X509_set_notAfter X509_set1_notAfter
#endif


/*
 * This one is only used so that a binary form can output, as in
 * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf)
 */
X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x);
const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x);
void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid,
                    const ASN1_BIT_STRING **psuid);
const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x);

EVP_PKEY *X509_get0_pubkey(const X509 *x);
EVP_PKEY *X509_get_pubkey(X509 *x);
ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x);

#define X509_REQ_VERSION_1 0

long X509_REQ_get_version(const X509_REQ *req);
int X509_REQ_set_version(X509_REQ *x, long version);
X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req);
int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name);
void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig,
                             const X509_ALGOR **palg);
void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig);
int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg);
int X509_REQ_get_signature_nid(const X509_REQ *req);
int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp);
int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey);
EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req);
EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req);
X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req);
int X509_REQ_extension_nid(int nid);
int *X509_REQ_get_extension_nids(void);
void X509_REQ_set_extension_nids(int *nids);
STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req);
int X509_REQ_add_extensions_nid(X509_REQ *req,
                                const STACK_OF(X509_EXTENSION) *exts, int nid);
int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext);
int X509_REQ_get_attr_count(const X509_REQ *req);
int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos);
int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj,
                             int lastpos);
X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc);
X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);
int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr);
int X509_REQ_add1_attr_by_OBJ(X509_REQ *req,
                              const ASN1_OBJECT *obj, int type,
                              const unsigned char *bytes, int len);
int X509_REQ_add1_attr_by_NID(X509_REQ *req,
                              int nid, int type,
                              const unsigned char *bytes, int len);
int X509_REQ_add1_attr_by_txt(X509_REQ *req,
                              const char *attrname, int type,
                              const unsigned char *bytes, int len);

#define X509_CRL_VERSION_1 0
#define X509_CRL_VERSION_2 1

int X509_CRL_set_version(X509_CRL *x, long version);
int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name);
int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm);
int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm);
int X509_CRL_sort(X509_CRL *crl);
int X509_CRL_up_ref(X509_CRL *crl);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate
#  define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate
#endif

long X509_CRL_get_version(const X509_CRL *crl);
const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl);
const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl);
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl);
OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl);
#endif
X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl);
const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl);
STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl);
void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig,
                             const X509_ALGOR **palg);
int X509_CRL_get_signature_nid(const X509_CRL *crl);
int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp);

const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x);
int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial);
const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x);
int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);
const STACK_OF(X509_EXTENSION) *
X509_REVOKED_get0_extensions(const X509_REVOKED *r);

X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer,
                        EVP_PKEY *skey, const EVP_MD *md, unsigned int flags);

int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey);

int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey);
int X509_chain_check_suiteb(int *perror_depth,
                            X509 *x, STACK_OF(X509) *chain,
                            unsigned long flags);
int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags);
STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain);

int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);
unsigned long X509_issuer_and_serial_hash(X509 *a);

int X509_issuer_name_cmp(const X509 *a, const X509 *b);
unsigned long X509_issuer_name_hash(X509 *a);

int X509_subject_name_cmp(const X509 *a, const X509 *b);
unsigned long X509_subject_name_hash(X509 *x);

# ifndef OPENSSL_NO_MD5
unsigned long X509_issuer_name_hash_old(X509 *a);
unsigned long X509_subject_name_hash_old(X509 *x);
# endif

# define X509_ADD_FLAG_DEFAULT  0
# define X509_ADD_FLAG_UP_REF   0x1
# define X509_ADD_FLAG_PREPEND  0x2
# define X509_ADD_FLAG_NO_DUP   0x4
# define X509_ADD_FLAG_NO_SS    0x8
int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags);
int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags);

int X509_cmp(const X509 *a, const X509 *b);
int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);
#ifndef OPENSSL_NO_DEPRECATED_3_0
# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL)
OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x,
                                                const EVP_PKEY *pubkey);
#endif
unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx,
                                const char *propq, int *ok);
unsigned long X509_NAME_hash_old(const X509_NAME *x);

int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);
int X509_CRL_match(const X509_CRL *a, const X509_CRL *b);
int X509_aux_print(BIO *out, X509 *x, int indent);
# ifndef OPENSSL_NO_STDIO
int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag,
                     unsigned long cflag);
int X509_print_fp(FILE *bp, X509 *x);
int X509_CRL_print_fp(FILE *bp, X509_CRL *x);
int X509_REQ_print_fp(FILE *bp, X509_REQ *req);
int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent,
                          unsigned long flags);
# endif

int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase);
int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent,
                       unsigned long flags);
int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag,
                  unsigned long cflag);
int X509_print(BIO *bp, X509 *x);
int X509_ocspid_print(BIO *bp, X509 *x);
int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag);
int X509_CRL_print(BIO *bp, X509_CRL *x);
int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag,
                      unsigned long cflag);
int X509_REQ_print(BIO *bp, X509_REQ *req);

int X509_NAME_entry_count(const X509_NAME *name);
int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid,
                              char *buf, int len);
int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                              char *buf, int len);

/*
 * NOTE: you should be passing -1, not 0 as lastpos. The functions that use
 * lastpos, search after that position on.
 */
int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos);
int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                               int lastpos);
X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc);
X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);
int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne,
                        int loc, int set);
int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
                                               const char *field, int type,
                                               const unsigned char *bytes,
                                               int len);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
                                               int type,
                                               const unsigned char *bytes,
                                               int len);
int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
                                               const ASN1_OBJECT *obj, int type,
                                               const unsigned char *bytes,
                                               int len);
int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj);
int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
                             const unsigned char *bytes, int len);
ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne);
ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne);
int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne);

int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder,
                       size_t *pderlen);

int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x);
int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x,
                          int nid, int lastpos);
int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x,
                          const ASN1_OBJECT *obj, int lastpos);
int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x,
                               int crit, int lastpos);
X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc);
X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc);
STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,
                                         X509_EXTENSION *ex, int loc);

int X509_get_ext_count(const X509 *x);
int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos);
int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos);
int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos);
X509_EXTENSION *X509_get_ext(const X509 *x, int loc);
X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx);
int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit,
                      unsigned long flags);

int X509_CRL_get_ext_count(const X509_CRL *x);
int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos);
int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj,
                            int lastpos);
int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos);
X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc);
X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);
int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);
void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx);
int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit,
                          unsigned long flags);

int X509_REVOKED_get_ext_count(const X509_REVOKED *x);
int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos);
int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj,
                                int lastpos);
int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit,
                                     int lastpos);
X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc);
X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);
int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);
void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit,
                               int *idx);
int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit,
                              unsigned long flags);

X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
                                             int nid, int crit,
                                             ASN1_OCTET_STRING *data);
X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex,
                                             const ASN1_OBJECT *obj, int crit,
                                             ASN1_OCTET_STRING *data);
int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj);
int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit);
int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data);
ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex);
ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne);
int X509_EXTENSION_get_critical(const X509_EXTENSION *ex);

int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x);
int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid,
                           int lastpos);
int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk,
                           const ASN1_OBJECT *obj, int lastpos);
X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc);
X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
                                           X509_ATTRIBUTE *attr);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE)
                                                  **x, const ASN1_OBJECT *obj,
                                                  int type,
                                                  const unsigned char *bytes,
                                                  int len);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE)
                                                  **x, int nid, int type,
                                                  const unsigned char *bytes,
                                                  int len);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE)
                                                  **x, const char *attrname,
                                                  int type,
                                                  const unsigned char *bytes,
                                                  int len);
void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x,
                              const ASN1_OBJECT *obj, int lastpos, int type);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
                                             int atrtype, const void *data,
                                             int len);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
                                             const ASN1_OBJECT *obj,
                                             int atrtype, const void *data,
                                             int len);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,
                                             const char *atrname, int type,
                                             const unsigned char *bytes,
                                             int len);
int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj);
int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
                             const void *data, int len);
void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype,
                               void *data);
int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr);
ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr);
ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx);

int EVP_PKEY_get_attr_count(const EVP_PKEY *key);
int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos);
int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj,
                             int lastpos);
X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc);
X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc);
int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr);
int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key,
                              const ASN1_OBJECT *obj, int type,
                              const unsigned char *bytes, int len);
int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key,
                              int nid, int type,
                              const unsigned char *bytes, int len);
int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key,
                              const char *attrname, int type,
                              const unsigned char *bytes, int len);

/* lookup a cert from a X509 STACK */
X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name,
                                     const ASN1_INTEGER *serial);
X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name);

DECLARE_ASN1_FUNCTIONS(PBEPARAM)
DECLARE_ASN1_FUNCTIONS(PBE2PARAM)
DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM)
#ifndef OPENSSL_NO_SCRYPT
DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS)
#endif

int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter,
                         const unsigned char *salt, int saltlen);
int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter,
                            const unsigned char *salt, int saltlen,
                            OSSL_LIB_CTX *libctx);

X509_ALGOR *PKCS5_pbe_set(int alg, int iter,
                          const unsigned char *salt, int saltlen);
X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter,
                             const unsigned char *salt, int saltlen,
                             OSSL_LIB_CTX *libctx);

X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
                           unsigned char *salt, int saltlen);
X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter,
                              unsigned char *salt, int saltlen,
                              unsigned char *aiv, int prf_nid);
X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter,
                                 unsigned char *salt, int saltlen,
                                 unsigned char *aiv, int prf_nid,
                                 OSSL_LIB_CTX *libctx);

#ifndef OPENSSL_NO_SCRYPT
X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher,
                                  const unsigned char *salt, int saltlen,
                                  unsigned char *aiv, uint64_t N, uint64_t r,
                                  uint64_t p);
#endif

X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen,
                             int prf_nid, int keylen);
X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen,
                                int prf_nid, int keylen,
                                OSSL_LIB_CTX *libctx);

/* PKCS#8 utilities */

DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO)

EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8);
EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx,
                            const char *propq);
PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey);

int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj,
                    int version, int ptype, void *pval,
                    unsigned char *penc, int penclen);
int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg,
                    const unsigned char **pk, int *ppklen,
                    const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8);

const STACK_OF(X509_ATTRIBUTE) *
PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8);
int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr);
int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type,
                                const unsigned char *bytes, int len);
int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj,
                                int type, const unsigned char *bytes, int len);


int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
                           int ptype, void *pval,
                           unsigned char *penc, int penclen);
int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
                           const unsigned char **pk, int *ppklen,
                           X509_ALGOR **pa, const X509_PUBKEY *pub);
int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b);

# ifdef  __cplusplus
}
# endif
#endif
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    /*
 * WARNING: do not edit!
 * Generated by Makefile from include/openssl/x509.h.in
 *
 * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */



#ifndef OPENSSL_X509_H
# define OPENSSL_X509_H
# pragma once

# include <openssl/macros.h>
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define HEADER_X509_H
# endif

# include <openssl/e_os2.h>
# include <openssl/types.h>
# include <openssl/symhacks.h>
# include <openssl/buffer.h>
# include <openssl/evp.h>
# include <openssl/bio.h>
# include <openssl/asn1.h>
# include <openssl/safestack.h>
# include <openssl/ec.h>

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  include <openssl/rsa.h>
#  include <openssl/dsa.h>
#  include <openssl/dh.h>
# endif

# include <openssl/sha.h>
# include <openssl/x509err.h>

#ifdef  __cplusplus
extern "C" {
#endif

/* Needed stacks for types defined in other headers */
SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME)
#define sk_X509_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_value(sk, idx) ((X509_NAME *)OPENSSL_sk_value(ossl_check_const_X509_NAME_sk_type(sk), (idx)))
#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp)))
#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n)))
#define sk_X509_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_sk_type(sk), (n))
#define sk_X509_NAME_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_delete(sk, i) ((X509_NAME *)OPENSSL_sk_delete(ossl_check_X509_NAME_sk_type(sk), (i)))
#define sk_X509_NAME_delete_ptr(sk, ptr) ((X509_NAME *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_pop(sk) ((X509_NAME *)OPENSSL_sk_pop(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_shift(sk) ((X509_NAME *)OPENSSL_sk_shift(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk),ossl_check_X509_NAME_freefunc_type(freefunc))
#define sk_X509_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), (idx))
#define sk_X509_NAME_set(sk, idx, ptr) ((X509_NAME *)OPENSSL_sk_set(ossl_check_X509_NAME_sk_type(sk), (idx), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), pnum)
#define sk_X509_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_dup(sk) ((STACK_OF(X509_NAME) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_sk_type(sk), ossl_check_X509_NAME_copyfunc_type(copyfunc), ossl_check_X509_NAME_freefunc_type(freefunc)))
#define sk_X509_NAME_set_cmp_func(sk, cmp) ((sk_X509_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509)
#define sk_X509_num(sk) OPENSSL_sk_num(ossl_check_const_X509_sk_type(sk))
#define sk_X509_value(sk, idx) ((X509 *)OPENSSL_sk_value(ossl_check_const_X509_sk_type(sk), (idx)))
#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp)))
#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_new_null())
#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n)))
#define sk_X509_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_sk_type(sk), (n))
#define sk_X509_free(sk) OPENSSL_sk_free(ossl_check_X509_sk_type(sk))
#define sk_X509_zero(sk) OPENSSL_sk_zero(ossl_check_X509_sk_type(sk))
#define sk_X509_delete(sk, i) ((X509 *)OPENSSL_sk_delete(ossl_check_X509_sk_type(sk), (i)))
#define sk_X509_delete_ptr(sk, ptr) ((X509 *)OPENSSL_sk_delete_ptr(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)))
#define sk_X509_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_pop(sk) ((X509 *)OPENSSL_sk_pop(ossl_check_X509_sk_type(sk)))
#define sk_X509_shift(sk) ((X509 *)OPENSSL_sk_shift(ossl_check_X509_sk_type(sk)))
#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk),ossl_check_X509_freefunc_type(freefunc))
#define sk_X509_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), (idx))
#define sk_X509_set(sk, idx, ptr) ((X509 *)OPENSSL_sk_set(ossl_check_X509_sk_type(sk), (idx), ossl_check_X509_type(ptr)))
#define sk_X509_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), pnum)
#define sk_X509_sort(sk) OPENSSL_sk_sort(ossl_check_X509_sk_type(sk))
#define sk_X509_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_sk_type(sk))
#define sk_X509_dup(sk) ((STACK_OF(X509) *)OPENSSL_sk_dup(ossl_check_const_X509_sk_type(sk)))
#define sk_X509_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_sk_type(sk), ossl_check_X509_copyfunc_type(copyfunc), ossl_check_X509_freefunc_type(freefunc)))
#define sk_X509_set_cmp_func(sk, cmp) ((sk_X509_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_sk_type(sk), ossl_check_X509_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED)
#define sk_X509_REVOKED_num(sk) OPENSSL_sk_num(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_value(sk, idx) ((X509_REVOKED *)OPENSSL_sk_value(ossl_check_const_X509_REVOKED_sk_type(sk), (idx)))
#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp)))
#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_null())
#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n)))
#define sk_X509_REVOKED_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_REVOKED_sk_type(sk), (n))
#define sk_X509_REVOKED_free(sk) OPENSSL_sk_free(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_zero(sk) OPENSSL_sk_zero(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_delete(sk, i) ((X509_REVOKED *)OPENSSL_sk_delete(ossl_check_X509_REVOKED_sk_type(sk), (i)))
#define sk_X509_REVOKED_delete_ptr(sk, ptr) ((X509_REVOKED *)OPENSSL_sk_delete_ptr(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_pop(sk) ((X509_REVOKED *)OPENSSL_sk_pop(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_shift(sk) ((X509_REVOKED *)OPENSSL_sk_shift(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk),ossl_check_X509_REVOKED_freefunc_type(freefunc))
#define sk_X509_REVOKED_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), (idx))
#define sk_X509_REVOKED_set(sk, idx, ptr) ((X509_REVOKED *)OPENSSL_sk_set(ossl_check_X509_REVOKED_sk_type(sk), (idx), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), pnum)
#define sk_X509_REVOKED_sort(sk) OPENSSL_sk_sort(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_dup(sk) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_dup(ossl_check_const_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_copyfunc_type(copyfunc), ossl_check_X509_REVOKED_freefunc_type(freefunc)))
#define sk_X509_REVOKED_set_cmp_func(sk, cmp) ((sk_X509_REVOKED_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL)
#define sk_X509_CRL_num(sk) OPENSSL_sk_num(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_value(sk, idx) ((X509_CRL *)OPENSSL_sk_value(ossl_check_const_X509_CRL_sk_type(sk), (idx)))
#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp)))
#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_null())
#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n)))
#define sk_X509_CRL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_CRL_sk_type(sk), (n))
#define sk_X509_CRL_free(sk) OPENSSL_sk_free(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_zero(sk) OPENSSL_sk_zero(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_delete(sk, i) ((X509_CRL *)OPENSSL_sk_delete(ossl_check_X509_CRL_sk_type(sk), (i)))
#define sk_X509_CRL_delete_ptr(sk, ptr) ((X509_CRL *)OPENSSL_sk_delete_ptr(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_pop(sk) ((X509_CRL *)OPENSSL_sk_pop(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_shift(sk) ((X509_CRL *)OPENSSL_sk_shift(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk),ossl_check_X509_CRL_freefunc_type(freefunc))
#define sk_X509_CRL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), (idx))
#define sk_X509_CRL_set(sk, idx, ptr) ((X509_CRL *)OPENSSL_sk_set(ossl_check_X509_CRL_sk_type(sk), (idx), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), pnum)
#define sk_X509_CRL_sort(sk) OPENSSL_sk_sort(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_dup(sk) ((STACK_OF(X509_CRL) *)OPENSSL_sk_dup(ossl_check_const_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_CRL) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_CRL_sk_type(sk), ossl_check_X509_CRL_copyfunc_type(copyfunc), ossl_check_X509_CRL_freefunc_type(freefunc)))
#define sk_X509_CRL_set_cmp_func(sk, cmp) ((sk_X509_CRL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_compfunc_type(cmp)))


/* Flags for X509_get_signature_info() */
/* Signature info is valid */
# define X509_SIG_INFO_VALID     0x1
/* Signature is suitable for TLS use */
# define X509_SIG_INFO_TLS       0x2

# define X509_FILETYPE_PEM       1
# define X509_FILETYPE_ASN1      2
# define X509_FILETYPE_DEFAULT   3

# define X509v3_KU_DIGITAL_SIGNATURE     0x0080
# define X509v3_KU_NON_REPUDIATION       0x0040
# define X509v3_KU_KEY_ENCIPHERMENT      0x0020
# define X509v3_KU_DATA_ENCIPHERMENT     0x0010
# define X509v3_KU_KEY_AGREEMENT         0x0008
# define X509v3_KU_KEY_CERT_SIGN         0x0004
# define X509v3_KU_CRL_SIGN              0x0002
# define X509v3_KU_ENCIPHER_ONLY         0x0001
# define X509v3_KU_DECIPHER_ONLY         0x8000
# define X509v3_KU_UNDEF                 0xffff

struct X509_algor_st {
    ASN1_OBJECT *algorithm;
    ASN1_TYPE *parameter;
} /* X509_ALGOR */ ;

typedef STACK_OF(X509_ALGOR) X509_ALGORS;

typedef struct X509_val_st {
    ASN1_TIME *notBefore;
    ASN1_TIME *notAfter;
} X509_VAL;

typedef struct X509_sig_st X509_SIG;

typedef struct X509_name_entry_st X509_NAME_ENTRY;

SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY)
#define sk_X509_NAME_ENTRY_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_value(sk, idx) ((X509_NAME_ENTRY *)OPENSSL_sk_value(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), (idx)))
#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))
#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n)))
#define sk_X509_NAME_ENTRY_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_ENTRY_sk_type(sk), (n))
#define sk_X509_NAME_ENTRY_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_delete(sk, i) ((X509_NAME_ENTRY *)OPENSSL_sk_delete(ossl_check_X509_NAME_ENTRY_sk_type(sk), (i)))
#define sk_X509_NAME_ENTRY_delete_ptr(sk, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_pop(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_pop(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_shift(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_shift(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk),ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc))
#define sk_X509_NAME_ENTRY_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), (idx))
#define sk_X509_NAME_ENTRY_set(sk, idx, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_set(ossl_check_X509_NAME_ENTRY_sk_type(sk), (idx), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), pnum)
#define sk_X509_NAME_ENTRY_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_dup(sk) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_copyfunc_type(copyfunc), ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)))
#define sk_X509_NAME_ENTRY_set_cmp_func(sk, cmp) ((sk_X509_NAME_ENTRY_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))


# define X509_EX_V_NETSCAPE_HACK         0x8000
# define X509_EX_V_INIT                  0x0001
typedef struct X509_extension_st X509_EXTENSION;
SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION)
#define sk_X509_EXTENSION_num(sk) OPENSSL_sk_num(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_value(sk, idx) ((X509_EXTENSION *)OPENSSL_sk_value(ossl_check_const_X509_EXTENSION_sk_type(sk), (idx)))
#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp)))
#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_null())
#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n)))
#define sk_X509_EXTENSION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_EXTENSION_sk_type(sk), (n))
#define sk_X509_EXTENSION_free(sk) OPENSSL_sk_free(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_zero(sk) OPENSSL_sk_zero(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_delete(sk, i) ((X509_EXTENSION *)OPENSSL_sk_delete(ossl_check_X509_EXTENSION_sk_type(sk), (i)))
#define sk_X509_EXTENSION_delete_ptr(sk, ptr) ((X509_EXTENSION *)OPENSSL_sk_delete_ptr(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_pop(sk) ((X509_EXTENSION *)OPENSSL_sk_pop(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_shift(sk) ((X509_EXTENSION *)OPENSSL_sk_shift(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk),ossl_check_X509_EXTENSION_freefunc_type(freefunc))
#define sk_X509_EXTENSION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), (idx))
#define sk_X509_EXTENSION_set(sk, idx, ptr) ((X509_EXTENSION *)OPENSSL_sk_set(ossl_check_X509_EXTENSION_sk_type(sk), (idx), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), pnum)
#define sk_X509_EXTENSION_sort(sk) OPENSSL_sk_sort(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_dup(sk) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_dup(ossl_check_const_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_copyfunc_type(copyfunc), ossl_check_X509_EXTENSION_freefunc_type(freefunc)))
#define sk_X509_EXTENSION_set_cmp_func(sk, cmp) ((sk_X509_EXTENSION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_compfunc_type(cmp)))

typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS;
typedef struct x509_attributes_st X509_ATTRIBUTE;
SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE)
#define sk_X509_ATTRIBUTE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_value(sk, idx) ((X509_ATTRIBUTE *)OPENSSL_sk_value(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), (idx)))
#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))
#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_null())
#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n)))
#define sk_X509_ATTRIBUTE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ATTRIBUTE_sk_type(sk), (n))
#define sk_X509_ATTRIBUTE_free(sk) OPENSSL_sk_free(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_delete(sk, i) ((X509_ATTRIBUTE *)OPENSSL_sk_delete(ossl_check_X509_ATTRIBUTE_sk_type(sk), (i)))
#define sk_X509_ATTRIBUTE_delete_ptr(sk, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_delete_ptr(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_pop(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_pop(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_shift(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_shift(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk),ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc))
#define sk_X509_ATTRIBUTE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), (idx))
#define sk_X509_ATTRIBUTE_set(sk, idx, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_set(ossl_check_X509_ATTRIBUTE_sk_type(sk), (idx), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), pnum)
#define sk_X509_ATTRIBUTE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_dup(sk) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_dup(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_copyfunc_type(copyfunc), ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)))
#define sk_X509_ATTRIBUTE_set_cmp_func(sk, cmp) ((sk_X509_ATTRIBUTE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))

typedef struct X509_req_info_st X509_REQ_INFO;
typedef struct X509_req_st X509_REQ;
typedef struct x509_cert_aux_st X509_CERT_AUX;
typedef struct x509_cinf_st X509_CINF;

/* Flags for X509_print_ex() */

# define X509_FLAG_COMPAT                0
# define X509_FLAG_NO_HEADER             1L
# define X509_FLAG_NO_VERSION            (1L << 1)
# define X509_FLAG_NO_SERIAL             (1L << 2)
# define X509_FLAG_NO_SIGNAME            (1L << 3)
# define X509_FLAG_NO_ISSUER             (1L << 4)
# define X509_FLAG_NO_VALIDITY           (1L << 5)
# define X509_FLAG_NO_SUBJECT            (1L << 6)
# define X509_FLAG_NO_PUBKEY             (1L << 7)
# define X509_FLAG_NO_EXTENSIONS         (1L << 8)
# define X509_FLAG_NO_SIGDUMP            (1L << 9)
# define X509_FLAG_NO_AUX                (1L << 10)
# define X509_FLAG_NO_ATTRIBUTES         (1L << 11)
# define X509_FLAG_NO_IDS                (1L << 12)
# define X509_FLAG_EXTENSIONS_ONLY_KID   (1L << 13)

/* Flags specific to X509_NAME_print_ex() */

/* The field separator information */

# define XN_FLAG_SEP_MASK        (0xf << 16)

# define XN_FLAG_COMPAT          0/* Traditional; use old X509_NAME_print */
# define XN_FLAG_SEP_COMMA_PLUS  (1 << 16)/* RFC2253 ,+ */
# define XN_FLAG_SEP_CPLUS_SPC   (2 << 16)/* ,+ spaced: more readable */
# define XN_FLAG_SEP_SPLUS_SPC   (3 << 16)/* ;+ spaced */
# define XN_FLAG_SEP_MULTILINE   (4 << 16)/* One line per field */

# define XN_FLAG_DN_REV          (1 << 20)/* Reverse DN order */

/* How the field name is shown */

# define XN_FLAG_FN_MASK         (0x3 << 21)

# define XN_FLAG_FN_SN           0/* Object short name */
# define XN_FLAG_FN_LN           (1 << 21)/* Object long name */
# define XN_FLAG_FN_OID          (2 << 21)/* Always use OIDs */
# define XN_FLAG_FN_NONE         (3 << 21)/* No field names */

# define XN_FLAG_SPC_EQ          (1 << 23)/* Put spaces round '=' */

/*
 * This determines if we dump fields we don't recognise: RFC2253 requires
 * this.
 */

# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24)

# define XN_FLAG_FN_ALIGN        (1 << 25)/* Align field names to 20
                                           * characters */

/* Complete set of RFC2253 flags */

# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \
                        XN_FLAG_SEP_COMMA_PLUS | \
                        XN_FLAG_DN_REV | \
                        XN_FLAG_FN_SN | \
                        XN_FLAG_DUMP_UNKNOWN_FIELDS)

/* readable oneline form */

# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \
                        ASN1_STRFLGS_ESC_QUOTE | \
                        XN_FLAG_SEP_CPLUS_SPC | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_SN)

/* readable multiline form */

# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \
                        ASN1_STRFLGS_ESC_MSB | \
                        XN_FLAG_SEP_MULTILINE | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_LN | \
                        XN_FLAG_FN_ALIGN)

typedef struct X509_crl_info_st X509_CRL_INFO;

typedef struct private_key_st {
    int version;
    /* The PKCS#8 data types */
    X509_ALGOR *enc_algor;
    ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */
    /* When decrypted, the following will not be NULL */
    EVP_PKEY *dec_pkey;
    /* used to encrypt and decrypt */
    int key_length;
    char *key_data;
    int key_free;               /* true if we should auto free key_data */
    /* expanded version of 'enc_algor' */
    EVP_CIPHER_INFO cipher;
} X509_PKEY;

typedef struct X509_info_st {
    X509 *x509;
    X509_CRL *crl;
    X509_PKEY *x_pkey;
    EVP_CIPHER_INFO enc_cipher;
    int enc_len;
    char *enc_data;
} X509_INFO;
SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO)
#define sk_X509_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_value(sk, idx) ((X509_INFO *)OPENSSL_sk_value(ossl_check_const_X509_INFO_sk_type(sk), (idx)))
#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp)))
#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_null())
#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n)))
#define sk_X509_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_INFO_sk_type(sk), (n))
#define sk_X509_INFO_free(sk) OPENSSL_sk_free(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_delete(sk, i) ((X509_INFO *)OPENSSL_sk_delete(ossl_check_X509_INFO_sk_type(sk), (i)))
#define sk_X509_INFO_delete_ptr(sk, ptr) ((X509_INFO *)OPENSSL_sk_delete_ptr(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_pop(sk) ((X509_INFO *)OPENSSL_sk_pop(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_shift(sk) ((X509_INFO *)OPENSSL_sk_shift(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk),ossl_check_X509_INFO_freefunc_type(freefunc))
#define sk_X509_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), (idx))
#define sk_X509_INFO_set(sk, idx, ptr) ((X509_INFO *)OPENSSL_sk_set(ossl_check_X509_INFO_sk_type(sk), (idx), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), pnum)
#define sk_X509_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_dup(sk) ((STACK_OF(X509_INFO) *)OPENSSL_sk_dup(ossl_check_const_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_INFO_sk_type(sk), ossl_check_X509_INFO_copyfunc_type(copyfunc), ossl_check_X509_INFO_freefunc_type(freefunc)))
#define sk_X509_INFO_set_cmp_func(sk, cmp) ((sk_X509_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_compfunc_type(cmp)))


/*
 * The next 2 structures and their 8 routines are used to manipulate Netscape's
 * spki structures - useful if you are writing a CA web page
 */
typedef struct Netscape_spkac_st {
    X509_PUBKEY *pubkey;
    ASN1_IA5STRING *challenge;  /* challenge sent in atlas >= PR2 */
} NETSCAPE_SPKAC;

typedef struct Netscape_spki_st {
    NETSCAPE_SPKAC *spkac;      /* signed public key and challenge */
    X509_ALGOR sig_algor;
    ASN1_BIT_STRING *signature;
} NETSCAPE_SPKI;

/* Netscape certificate sequence structure */
typedef struct Netscape_certificate_sequence {
    ASN1_OBJECT *type;
    STACK_OF(X509) *certs;
} NETSCAPE_CERT_SEQUENCE;

/*- Unused (and iv length is wrong)
typedef struct CBCParameter_st
        {
        unsigned char iv[8];
        } CBC_PARAM;
*/

/* Password based encryption structure */

typedef struct PBEPARAM_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *iter;
} PBEPARAM;

/* Password based encryption V2 structures */

typedef struct PBE2PARAM_st {
    X509_ALGOR *keyfunc;
    X509_ALGOR *encryption;
} PBE2PARAM;

typedef struct PBKDF2PARAM_st {
/* Usually OCTET STRING but could be anything */
    ASN1_TYPE *salt;
    ASN1_INTEGER *iter;
    ASN1_INTEGER *keylength;
    X509_ALGOR *prf;
} PBKDF2PARAM;

#ifndef OPENSSL_NO_SCRYPT
typedef struct SCRYPT_PARAMS_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *costParameter;
    ASN1_INTEGER *blockSize;
    ASN1_INTEGER *parallelizationParameter;
    ASN1_INTEGER *keyLength;
} SCRYPT_PARAMS;
#endif

#ifdef  __cplusplus
}
#endif

# include <openssl/x509_vfy.h>
# include <openssl/pkcs7.h>

#ifdef  __cplusplus
extern "C" {
#endif

# define X509_EXT_PACK_UNKNOWN   1
# define X509_EXT_PACK_STRING    2

# define         X509_extract_key(x)     X509_get_pubkey(x)/*****/
# define         X509_REQ_extract_key(a) X509_REQ_get_pubkey(a)
# define         X509_name_cmp(a,b)      X509_NAME_cmp((a),(b))

void X509_CRL_set_default_method(const X509_CRL_METHOD *meth);
X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl),
                                     int (*crl_free) (X509_CRL *crl),
                                     int (*crl_lookup) (X509_CRL *crl,
                                                        X509_REVOKED **ret,
                                                        const
                                                        ASN1_INTEGER *serial,
                                                        const
                                                        X509_NAME *issuer),
                                     int (*crl_verify) (X509_CRL *crl,
                                                        EVP_PKEY *pk));
void X509_CRL_METHOD_free(X509_CRL_METHOD *m);

void X509_CRL_set_meth_data(X509_CRL *crl, void *dat);
void *X509_CRL_get_meth_data(X509_CRL *crl);

const char *X509_verify_cert_error_string(long n);

int X509_verify(X509 *a, EVP_PKEY *r);
int X509_self_signed(X509 *cert, int verify_signature);

int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx,
                       const char *propq);
int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r);
int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r);
int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r);

NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len);
char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x);
EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x);
int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey);

int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki);

int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent);
int X509_signature_print(BIO *bp, const X509_ALGOR *alg,
                         const ASN1_STRING *sig);

int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx);
int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx);
int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx);
int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md);

int X509_pubkey_digest(const X509 *data, const EVP_MD *type,
                       unsigned char *md, unsigned int *len);
int X509_digest(const X509 *data, const EVP_MD *type,
                unsigned char *md, unsigned int *len);
ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert,
                                   EVP_MD **md_used, int *md_is_fallback);
int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type,
                    unsigned char *md, unsigned int *len);
int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type,
                    unsigned char *md, unsigned int *len);
int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type,
                     unsigned char *md, unsigned int *len);

X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout);
X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout);
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  include <openssl/http.h> /* OSSL_HTTP_REQ_CTX_nbio_d2i */
#  define X509_http_nbio(rctx, pcert) \
      OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509))
#  define X509_CRL_http_nbio(rctx, pcrl) \
      OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL))
# endif

# ifndef OPENSSL_NO_STDIO
X509 *d2i_X509_fp(FILE *fp, X509 **x509);
int i2d_X509_fp(FILE *fp, const X509 *x509);
X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl);
int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl);
X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req);
int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req);
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa);
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_DSA
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa);
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa);
#   endif
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_EC
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey);
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey);
#   endif /* OPENSSL_NO_EC */
#  endif /* OPENSSL_NO_DEPRECATED_3_0 */
X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8);
int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8);
X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk);
int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk);
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,
                                                PKCS8_PRIV_KEY_INFO **p8inf);
int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf);
int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key);
int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx,
                               const char *propq);
EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a);
int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
# endif

X509 *d2i_X509_bio(BIO *bp, X509 **x509);
int i2d_X509_bio(BIO *bp, const X509 *x509);
X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl);
int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl);
X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req);
int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req);
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa);
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_DSA
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa);
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa);
#   endif
#  endif

#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_EC
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey);
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey);
#   endif /* OPENSSL_NO_EC */
#  endif /* OPENSSL_NO_DEPRECATED_3_0 */

X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8);
int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8);
X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk);
int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk);
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
                                                 PKCS8_PRIV_KEY_INFO **p8inf);
int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf);
int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key);
int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx,
                                const char *propq);
EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);

DECLARE_ASN1_DUP_FUNCTION(X509)
DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR)
DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE)
DECLARE_ASN1_DUP_FUNCTION(X509_CRL)
DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION)
DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY)
DECLARE_ASN1_DUP_FUNCTION(X509_REQ)
DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED)
int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype,
                    void *pval);
void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype,
                     const void **ppval, const X509_ALGOR *algor);
void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);
int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b);
int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src);

DECLARE_ASN1_DUP_FUNCTION(X509_NAME)
DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY)

int X509_cmp_time(const ASN1_TIME *s, time_t *t);
int X509_cmp_current_time(const ASN1_TIME *s);
int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm,
                       const ASN1_TIME *start, const ASN1_TIME *end);
ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t);
ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s,
                            int offset_day, long offset_sec, time_t *t);
ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj);

const char *X509_get_default_cert_area(void);
const char *X509_get_default_cert_dir(void);
const char *X509_get_default_cert_file(void);
const char *X509_get_default_cert_dir_env(void);
const char *X509_get_default_cert_file_env(void);
const char *X509_get_default_private_dir(void);

X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey);

DECLARE_ASN1_FUNCTIONS(X509_ALGOR)
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS)
DECLARE_ASN1_FUNCTIONS(X509_VAL)

DECLARE_ASN1_FUNCTIONS(X509_PUBKEY)

X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key);
EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key);
int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain);
long X509_get_pathlen(X509 *x);
DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY)
EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length,
                        OSSL_LIB_CTX *libctx, const char *propq);
# ifndef OPENSSL_NO_DEPRECATED_3_0
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY)
# endif
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  ifndef OPENSSL_NO_DSA
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY)
#  endif
# endif
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  ifndef OPENSSL_NO_EC
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY)
#  endif
# endif

DECLARE_ASN1_FUNCTIONS(X509_SIG)
void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg,
                   const ASN1_OCTET_STRING **pdigest);
void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg,
                   ASN1_OCTET_STRING **pdigest);

DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO)
DECLARE_ASN1_FUNCTIONS(X509_REQ)
X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq);

DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE)
X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value);

DECLARE_ASN1_FUNCTIONS(X509_EXTENSION)
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS)

DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY)

DECLARE_ASN1_FUNCTIONS(X509_NAME)

int X509_NAME_set(X509_NAME **xn, const X509_NAME *name);

DECLARE_ASN1_FUNCTIONS(X509_CINF)
DECLARE_ASN1_FUNCTIONS(X509)
X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX)

#define X509_get_ex_new_index(l, p, newf, dupf, freef) \
    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef)
int X509_set_ex_data(X509 *r, int idx, void *arg);
void *X509_get_ex_data(const X509 *r, int idx);
DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX)

int i2d_re_X509_tbs(X509 *x, unsigned char **pp);

int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid,
                      int *secbits, uint32_t *flags);
void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid,
                       int secbits, uint32_t flags);

int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits,
                            uint32_t *flags);

void X509_get0_signature(const ASN1_BIT_STRING **psig,
                         const X509_ALGOR **palg, const X509 *x);
int X509_get_signature_nid(const X509 *x);

void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id);
ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x);
void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id);
ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x);

int X509_alias_set1(X509 *x, const unsigned char *name, int len);
int X509_keyid_set1(X509 *x, const unsigned char *id, int len);
unsigned char *X509_alias_get0(X509 *x, int *len);
unsigned char *X509_keyid_get0(X509 *x, int *len);

DECLARE_ASN1_FUNCTIONS(X509_REVOKED)
DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO)
DECLARE_ASN1_FUNCTIONS(X509_CRL)
X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq);

int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
int X509_CRL_get0_by_serial(X509_CRL *crl,
                            X509_REVOKED **ret, const ASN1_INTEGER *serial);
int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x);

X509_PKEY *X509_PKEY_new(void);
void X509_PKEY_free(X509_PKEY *a);

DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI)
DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC)
DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE)

X509_INFO *X509_INFO_new(void);
void X509_INFO_free(X509_INFO *a);
char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size);

#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0
int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1,
                ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey);
OSSL_DEPRECATEDIN_3_0
int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data,
                unsigned char *md, unsigned int *len);
OSSL_DEPRECATEDIN_3_0
int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2,
              ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey,
              const EVP_MD *type);
#endif
int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data,
                     unsigned char *md, unsigned int *len);
int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg,
                     const ASN1_BIT_STRING *signature, const void *data,
                     EVP_PKEY *pkey);
int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg,
                         const ASN1_BIT_STRING *signature, const void *data,
                         EVP_MD_CTX *ctx);
int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2,
                   ASN1_BIT_STRING *signature, const void *data,
                   EVP_PKEY *pkey, const EVP_MD *md);
int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1,
                       X509_ALGOR *algor2, ASN1_BIT_STRING *signature,
                       const void *data, EVP_MD_CTX *ctx);

#define X509_VERSION_1 0
#define X509_VERSION_2 1
#define X509_VERSION_3 2

long X509_get_version(const X509 *x);
int X509_set_version(X509 *x, long version);
int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial);
ASN1_INTEGER *X509_get_serialNumber(X509 *x);
const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x);
int X509_set_issuer_name(X509 *x, const X509_NAME *name);
X509_NAME *X509_get_issuer_name(const X509 *a);
int X509_set_subject_name(X509 *x, const X509_NAME *name);
X509_NAME *X509_get_subject_name(const X509 *a);
const ASN1_TIME * X509_get0_notBefore(const X509 *x);
ASN1_TIME *X509_getm_notBefore(const X509 *x);
int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm);
const ASN1_TIME *X509_get0_notAfter(const X509 *x);
ASN1_TIME *X509_getm_notAfter(const X509 *x);
int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm);
int X509_set_pubkey(X509 *x, EVP_PKEY *pkey);
int X509_up_ref(X509 *x);
int X509_get_signature_type(const X509 *x);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define X509_get_notBefore X509_getm_notBefore
#  define X509_get_notAfter X509_getm_notAfter
#  define X509_set_notBefore X509_set1_notBefore
#  define X509_set_notAfter X509_set1_notAfter
#endif


/*
 * This one is only used so that a binary form can output, as in
 * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf)
 */
X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x);
const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x);
void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid,
                    const ASN1_BIT_STRING **psuid);
const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x);

EVP_PKEY *X509_get0_pubkey(const X509 *x);
EVP_PKEY *X509_get_pubkey(X509 *x);
ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x);

#define X509_REQ_VERSION_1 0

long X509_REQ_get_version(const X509_REQ *req);
int X509_REQ_set_version(X509_REQ *x, long version);
X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req);
int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name);
void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig,
                             const X509_ALGOR **palg);
void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig);
int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg);
int X509_REQ_get_signature_nid(const X509_REQ *req);
int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp);
int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey);
EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req);
EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req);
X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req);
int X509_REQ_extension_nid(int nid);
int *X509_REQ_get_extension_nids(void);
void X509_REQ_set_extension_nids(int *nids);
STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req);
int X509_REQ_add_extensions_nid(X509_REQ *req,
                                const STACK_OF(X509_EXTENSION) *exts, int nid);
int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext);
int X509_REQ_get_attr_count(const X509_REQ *req);
int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos);
int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj,
                             int lastpos);
X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc);
X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);
int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr);
int X509_REQ_add1_attr_by_OBJ(X509_REQ *req,
                              const ASN1_OBJECT *obj, int type,
                              const unsigned char *bytes, int len);
int X509_REQ_add1_attr_by_NID(X509_REQ *req,
                              int nid, int type,
                              const unsigned char *bytes, int len);
int X509_REQ_add1_attr_by_txt(X509_REQ *req,
                              const char *attrname, int type,
                              const unsigned char *bytes, int len);

#define X509_CRL_VERSION_1 0
#define X509_CRL_VERSION_2 1

int X509_CRL_set_version(X509_CRL *x, long version);
int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name);
int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm);
int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm);
int X509_CRL_sort(X509_CRL *crl);
int X509_CRL_up_ref(X509_CRL *crl);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate
#  define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate
#endif

long X509_CRL_get_version(const X509_CRL *crl);
const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl);
const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl);
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl);
OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl);
#endif
X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl);
const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl);
STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl);
void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig,
                             const X509_ALGOR **palg);
int X509_CRL_get_signature_nid(const X509_CRL *crl);
int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp);

const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x);
int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial);
const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x);
int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);
const STACK_OF(X509_EXTENSION) *
X509_REVOKED_get0_extensions(const X509_REVOKED *r);

X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer,
                        EVP_PKEY *skey, const EVP_MD *md, unsigned int flags);

int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey);

int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey);
int X509_chain_check_suiteb(int *perror_depth,
                            X509 *x, STACK_OF(X509) *chain,
                            unsigned long flags);
int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags);
STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain);

int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);
unsigned long X509_issuer_and_serial_hash(X509 *a);

int X509_issuer_name_cmp(const X509 *a, const X509 *b);
unsigned long X509_issuer_name_hash(X509 *a);

int X509_subject_name_cmp(const X509 *a, const X509 *b);
unsigned long X509_subject_name_hash(X509 *x);

# ifndef OPENSSL_NO_MD5
unsigned long X509_issuer_name_hash_old(X509 *a);
unsigned long X509_subject_name_hash_old(X509 *x);
# endif

# define X509_ADD_FLAG_DEFAULT  0
# define X509_ADD_FLAG_UP_REF   0x1
# define X509_ADD_FLAG_PREPEND  0x2
# define X509_ADD_FLAG_NO_DUP   0x4
# define X509_ADD_FLAG_NO_SS    0x8
int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags);
int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags);

int X509_cmp(const X509 *a, const X509 *b);
int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);
#ifndef OPENSSL_NO_DEPRECATED_3_0
# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL)
OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x,
                                                const EVP_PKEY *pubkey);
#endif
unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx,
                                const char *propq, int *ok);
unsigned long X509_NAME_hash_old(const X509_NAME *x);

int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);
int X509_CRL_match(const X509_CRL *a, const X509_CRL *b);
int X509_aux_print(BIO *out, X509 *x, int indent);
# ifndef OPENSSL_NO_STDIO
int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag,
                     unsigned long cflag);
int X509_print_fp(FILE *bp, X509 *x);
int X509_CRL_print_fp(FILE *bp, X509_CRL *x);
int X509_REQ_print_fp(FILE *bp, X509_REQ *req);
int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent,
                          unsigned long flags);
# endif

int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase);
int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent,
                       unsigned long flags);
int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag,
                  unsigned long cflag);
int X509_print(BIO *bp, X509 *x);
int X509_ocspid_print(BIO *bp, X509 *x);
int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag);
int X509_CRL_print(BIO *bp, X509_CRL *x);
int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag,
                      unsigned long cflag);
int X509_REQ_print(BIO *bp, X509_REQ *req);

int X509_NAME_entry_count(const X509_NAME *name);
int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid,
                              char *buf, int len);
int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                              char *buf, int len);

/*
 * NOTE: you should be passing -1, not 0 as lastpos. The functions that use
 * lastpos, search after that position on.
 */
int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos);
int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                               int lastpos);
X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc);
X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);
int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne,
                        int loc, int set);
int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
                                               const char *field, int type,
                                               const unsigned char *bytes,
                                               int len);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
                                               int type,
                                               const unsigned char *bytes,
                                               int len);
int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
                                               const ASN1_OBJECT *obj, int type,
                                               const unsigned char *bytes,
                                               int len);
int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj);
int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
                             const unsigned char *bytes, int len);
ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne);
ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne);
int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne);

int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder,
                       size_t *pderlen);

int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x);
int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x,
                          int nid, int lastpos);
int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x,
                          const ASN1_OBJECT *obj, int lastpos);
int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x,
                               int crit, int lastpos);
X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc);
X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc);
STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,
                                         X509_EXTENSION *ex, int loc);

int X509_get_ext_count(const X509 *x);
int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos);
int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos);
int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos);
X509_EXTENSION *X509_get_ext(const X509 *x, int loc);
X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx);
int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit,
                      unsigned long flags);

int X509_CRL_get_ext_count(const X509_CRL *x);
int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos);
int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj,
                            int lastpos);
int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos);
X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc);
X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);
int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);
void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx);
int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit,
                          unsigned long flags);

int X509_REVOKED_get_ext_count(const X509_REVOKED *x);
int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos);
int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj,
                                int lastpos);
int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit,
                                     int lastpos);
X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc);
X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);
int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);
void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit,
                               int *idx);
int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit,
                              unsigned long flags);

X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
                                             int nid, int crit,
                                             ASN1_OCTET_STRING *data);
X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex,
                                             const ASN1_OBJECT *obj, int crit,
                                             ASN1_OCTET_STRING *data);
int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj);
int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit);
int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data);
ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex);
ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne);
int X509_EXTENSION_get_critical(const X509_EXTENSION *ex);

int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x);
int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid,
                           int lastpos);
int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk,
                           const ASN1_OBJECT *obj, int lastpos);
X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc);
X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
                                           X509_ATTRIBUTE *attr);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE)
                                                  **x, const ASN1_OBJECT *obj,
                                                  int type,
                                                  const unsigned char *bytes,
                                                  int len);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE)
                                                  **x, int nid, int type,
                                                  const unsigned char *bytes,
                                                  int len);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE)
                                                  **x, const char *attrname,
                                                  int type,
                                                  const unsigned char *bytes,
                                                  int len);
void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x,
                              const ASN1_OBJECT *obj, int lastpos, int type);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
                                             int atrtype, const void *data,
                                             int len);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
                                             const ASN1_OBJECT *obj,
                                             int atrtype, const void *data,
                                             int len);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,
                                             const char *atrname, int type,
                                             const unsigned char *bytes,
                                             int len);
int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj);
int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
                             const void *data, int len);
void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype,
                               void *data);
int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr);
ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr);
ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx);

int EVP_PKEY_get_attr_count(const EVP_PKEY *key);
int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos);
int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj,
                             int lastpos);
X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc);
X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc);
int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr);
int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key,
                              const ASN1_OBJECT *obj, int type,
                              const unsigned char *bytes, int len);
int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key,
                              int nid, int type,
                              const unsigned char *bytes, int len);
int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key,
                              const char *attrname, int type,
                              const unsigned char *bytes, int len);

/* lookup a cert from a X509 STACK */
X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name,
                                     const ASN1_INTEGER *serial);
X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name);

DECLARE_ASN1_FUNCTIONS(PBEPARAM)
DECLARE_ASN1_FUNCTIONS(PBE2PARAM)
DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM)
#ifndef OPENSSL_NO_SCRYPT
DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS)
#endif

int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter,
                         const unsigned char *salt, int saltlen);
int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter,
                            const unsigned char *salt, int saltlen,
                            OSSL_LIB_CTX *libctx);

X509_ALGOR *PKCS5_pbe_set(int alg, int iter,
                          const unsigned char *salt, int saltlen);
X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter,
                             const unsigned char *salt, int saltlen,
                             OSSL_LIB_CTX *libctx);

X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
                           unsigned char *salt, int saltlen);
X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter,
                              unsigned char *salt, int saltlen,
                              unsigned char *aiv, int prf_nid);
X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter,
                                 unsigned char *salt, int saltlen,
                                 unsigned char *aiv, int prf_nid,
                                 OSSL_LIB_CTX *libctx);

#ifndef OPENSSL_NO_SCRYPT
X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher,
                                  const unsigned char *salt, int saltlen,
                                  unsigned char *aiv, uint64_t N, uint64_t r,
                                  uint64_t p);
#endif

X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen,
                             int prf_nid, int keylen);
X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen,
                                int prf_nid, int keylen,
                                OSSL_LIB_CTX *libctx);

/* PKCS#8 utilities */

DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO)

EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8);
EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx,
                            const char *propq);
PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey);

int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj,
                    int version, int ptype, void *pval,
                    unsigned char *penc, int penclen);
int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg,
                    const unsigned char **pk, int *ppklen,
                    const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8);

const STACK_OF(X509_ATTRIBUTE) *
PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8);
int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr);
int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type,
                                const unsigned char *bytes, int len);
int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj,
                                int type, const unsigned char *bytes, int len);


int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
                           int ptype, void *pval,
                           unsigned char *penc, int penclen);
int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
                           const unsigned char **pk, int *ppklen,
                           X509_ALGOR **pa, const X509_PUBKEY *pub);
int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b);

# ifdef  __cplusplus
}
# endif
#endif
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    /*
 * WARNING: do not edit!
 * Generated by makefile from include/openssl/x509.h.in
 *
 * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */



#ifndef OPENSSL_X509_H
# define OPENSSL_X509_H
# pragma once

# include <openssl/macros.h>
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define HEADER_X509_H
# endif

# include <openssl/e_os2.h>
# include <openssl/types.h>
# include <openssl/symhacks.h>
# include <openssl/buffer.h>
# include <openssl/evp.h>
# include <openssl/bio.h>
# include <openssl/asn1.h>
# include <openssl/safestack.h>
# include <openssl/ec.h>

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  include <openssl/rsa.h>
#  include <openssl/dsa.h>
#  include <openssl/dh.h>
# endif

# include <openssl/sha.h>
# include <openssl/x509err.h>

#ifdef  __cplusplus
extern "C" {
#endif

/* Needed stacks for types defined in other headers */
SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME)
#define sk_X509_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_value(sk, idx) ((X509_NAME *)OPENSSL_sk_value(ossl_check_const_X509_NAME_sk_type(sk), (idx)))
#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp)))
#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n)))
#define sk_X509_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_sk_type(sk), (n))
#define sk_X509_NAME_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_delete(sk, i) ((X509_NAME *)OPENSSL_sk_delete(ossl_check_X509_NAME_sk_type(sk), (i)))
#define sk_X509_NAME_delete_ptr(sk, ptr) ((X509_NAME *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_pop(sk) ((X509_NAME *)OPENSSL_sk_pop(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_shift(sk) ((X509_NAME *)OPENSSL_sk_shift(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk),ossl_check_X509_NAME_freefunc_type(freefunc))
#define sk_X509_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), (idx))
#define sk_X509_NAME_set(sk, idx, ptr) ((X509_NAME *)OPENSSL_sk_set(ossl_check_X509_NAME_sk_type(sk), (idx), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), pnum)
#define sk_X509_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_dup(sk) ((STACK_OF(X509_NAME) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_sk_type(sk), ossl_check_X509_NAME_copyfunc_type(copyfunc), ossl_check_X509_NAME_freefunc_type(freefunc)))
#define sk_X509_NAME_set_cmp_func(sk, cmp) ((sk_X509_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509)
#define sk_X509_num(sk) OPENSSL_sk_num(ossl_check_const_X509_sk_type(sk))
#define sk_X509_value(sk, idx) ((X509 *)OPENSSL_sk_value(ossl_check_const_X509_sk_type(sk), (idx)))
#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp)))
#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_new_null())
#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n)))
#define sk_X509_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_sk_type(sk), (n))
#define sk_X509_free(sk) OPENSSL_sk_free(ossl_check_X509_sk_type(sk))
#define sk_X509_zero(sk) OPENSSL_sk_zero(ossl_check_X509_sk_type(sk))
#define sk_X509_delete(sk, i) ((X509 *)OPENSSL_sk_delete(ossl_check_X509_sk_type(sk), (i)))
#define sk_X509_delete_ptr(sk, ptr) ((X509 *)OPENSSL_sk_delete_ptr(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)))
#define sk_X509_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_pop(sk) ((X509 *)OPENSSL_sk_pop(ossl_check_X509_sk_type(sk)))
#define sk_X509_shift(sk) ((X509 *)OPENSSL_sk_shift(ossl_check_X509_sk_type(sk)))
#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk),ossl_check_X509_freefunc_type(freefunc))
#define sk_X509_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), (idx))
#define sk_X509_set(sk, idx, ptr) ((X509 *)OPENSSL_sk_set(ossl_check_X509_sk_type(sk), (idx), ossl_check_X509_type(ptr)))
#define sk_X509_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), pnum)
#define sk_X509_sort(sk) OPENSSL_sk_sort(ossl_check_X509_sk_type(sk))
#define sk_X509_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_sk_type(sk))
#define sk_X509_dup(sk) ((STACK_OF(X509) *)OPENSSL_sk_dup(ossl_check_const_X509_sk_type(sk)))
#define sk_X509_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_sk_type(sk), ossl_check_X509_copyfunc_type(copyfunc), ossl_check_X509_freefunc_type(freefunc)))
#define sk_X509_set_cmp_func(sk, cmp) ((sk_X509_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_sk_type(sk), ossl_check_X509_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED)
#define sk_X509_REVOKED_num(sk) OPENSSL_sk_num(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_value(sk, idx) ((X509_REVOKED *)OPENSSL_sk_value(ossl_check_const_X509_REVOKED_sk_type(sk), (idx)))
#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp)))
#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_null())
#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n)))
#define sk_X509_REVOKED_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_REVOKED_sk_type(sk), (n))
#define sk_X509_REVOKED_free(sk) OPENSSL_sk_free(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_zero(sk) OPENSSL_sk_zero(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_delete(sk, i) ((X509_REVOKED *)OPENSSL_sk_delete(ossl_check_X509_REVOKED_sk_type(sk), (i)))
#define sk_X509_REVOKED_delete_ptr(sk, ptr) ((X509_REVOKED *)OPENSSL_sk_delete_ptr(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_pop(sk) ((X509_REVOKED *)OPENSSL_sk_pop(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_shift(sk) ((X509_REVOKED *)OPENSSL_sk_shift(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk),ossl_check_X509_REVOKED_freefunc_type(freefunc))
#define sk_X509_REVOKED_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), (idx))
#define sk_X509_REVOKED_set(sk, idx, ptr) ((X509_REVOKED *)OPENSSL_sk_set(ossl_check_X509_REVOKED_sk_type(sk), (idx), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), pnum)
#define sk_X509_REVOKED_sort(sk) OPENSSL_sk_sort(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_dup(sk) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_dup(ossl_check_const_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_copyfunc_type(copyfunc), ossl_check_X509_REVOKED_freefunc_type(freefunc)))
#define sk_X509_REVOKED_set_cmp_func(sk, cmp) ((sk_X509_REVOKED_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL)
#define sk_X509_CRL_num(sk) OPENSSL_sk_num(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_value(sk, idx) ((X509_CRL *)OPENSSL_sk_value(ossl_check_const_X509_CRL_sk_type(sk), (idx)))
#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp)))
#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_null())
#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n)))
#define sk_X509_CRL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_CRL_sk_type(sk), (n))
#define sk_X509_CRL_free(sk) OPENSSL_sk_free(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_zero(sk) OPENSSL_sk_zero(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_delete(sk, i) ((X509_CRL *)OPENSSL_sk_delete(ossl_check_X509_CRL_sk_type(sk), (i)))
#define sk_X509_CRL_delete_ptr(sk, ptr) ((X509_CRL *)OPENSSL_sk_delete_ptr(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_pop(sk) ((X509_CRL *)OPENSSL_sk_pop(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_shift(sk) ((X509_CRL *)OPENSSL_sk_shift(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk),ossl_check_X509_CRL_freefunc_type(freefunc))
#define sk_X509_CRL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), (idx))
#define sk_X509_CRL_set(sk, idx, ptr) ((X509_CRL *)OPENSSL_sk_set(ossl_check_X509_CRL_sk_type(sk), (idx), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), pnum)
#define sk_X509_CRL_sort(sk) OPENSSL_sk_sort(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_dup(sk) ((STACK_OF(X509_CRL) *)OPENSSL_sk_dup(ossl_check_const_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_CRL) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_CRL_sk_type(sk), ossl_check_X509_CRL_copyfunc_type(copyfunc), ossl_check_X509_CRL_freefunc_type(freefunc)))
#define sk_X509_CRL_set_cmp_func(sk, cmp) ((sk_X509_CRL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_compfunc_type(cmp)))


/* Flags for X509_get_signature_info() */
/* Signature info is valid */
# define X509_SIG_INFO_VALID     0x1
/* Signature is suitable for TLS use */
# define X509_SIG_INFO_TLS       0x2

# define X509_FILETYPE_PEM       1
# define X509_FILETYPE_ASN1      2
# define X509_FILETYPE_DEFAULT   3

# define X509v3_KU_DIGITAL_SIGNATURE     0x0080
# define X509v3_KU_NON_REPUDIATION       0x0040
# define X509v3_KU_KEY_ENCIPHERMENT      0x0020
# define X509v3_KU_DATA_ENCIPHERMENT     0x0010
# define X509v3_KU_KEY_AGREEMENT         0x0008
# define X509v3_KU_KEY_CERT_SIGN         0x0004
# define X509v3_KU_CRL_SIGN              0x0002
# define X509v3_KU_ENCIPHER_ONLY         0x0001
# define X509v3_KU_DECIPHER_ONLY         0x8000
# define X509v3_KU_UNDEF                 0xffff

struct X509_algor_st {
    ASN1_OBJECT *algorithm;
    ASN1_TYPE *parameter;
} /* X509_ALGOR */ ;

typedef STACK_OF(X509_ALGOR) X509_ALGORS;

typedef struct X509_val_st {
    ASN1_TIME *notBefore;
    ASN1_TIME *notAfter;
} X509_VAL;

typedef struct X509_sig_st X509_SIG;

typedef struct X509_name_entry_st X509_NAME_ENTRY;

SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY)
#define sk_X509_NAME_ENTRY_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_value(sk, idx) ((X509_NAME_ENTRY *)OPENSSL_sk_value(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), (idx)))
#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))
#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n)))
#define sk_X509_NAME_ENTRY_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_ENTRY_sk_type(sk), (n))
#define sk_X509_NAME_ENTRY_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_delete(sk, i) ((X509_NAME_ENTRY *)OPENSSL_sk_delete(ossl_check_X509_NAME_ENTRY_sk_type(sk), (i)))
#define sk_X509_NAME_ENTRY_delete_ptr(sk, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_pop(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_pop(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_shift(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_shift(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk),ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc))
#define sk_X509_NAME_ENTRY_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), (idx))
#define sk_X509_NAME_ENTRY_set(sk, idx, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_set(ossl_check_X509_NAME_ENTRY_sk_type(sk), (idx), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), pnum)
#define sk_X509_NAME_ENTRY_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_dup(sk) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_copyfunc_type(copyfunc), ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)))
#define sk_X509_NAME_ENTRY_set_cmp_func(sk, cmp) ((sk_X509_NAME_ENTRY_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))


# define X509_EX_V_NETSCAPE_HACK         0x8000
# define X509_EX_V_INIT                  0x0001
typedef struct X509_extension_st X509_EXTENSION;
SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION)
#define sk_X509_EXTENSION_num(sk) OPENSSL_sk_num(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_value(sk, idx) ((X509_EXTENSION *)OPENSSL_sk_value(ossl_check_const_X509_EXTENSION_sk_type(sk), (idx)))
#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp)))
#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_null())
#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n)))
#define sk_X509_EXTENSION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_EXTENSION_sk_type(sk), (n))
#define sk_X509_EXTENSION_free(sk) OPENSSL_sk_free(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_zero(sk) OPENSSL_sk_zero(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_delete(sk, i) ((X509_EXTENSION *)OPENSSL_sk_delete(ossl_check_X509_EXTENSION_sk_type(sk), (i)))
#define sk_X509_EXTENSION_delete_ptr(sk, ptr) ((X509_EXTENSION *)OPENSSL_sk_delete_ptr(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_pop(sk) ((X509_EXTENSION *)OPENSSL_sk_pop(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_shift(sk) ((X509_EXTENSION *)OPENSSL_sk_shift(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk),ossl_check_X509_EXTENSION_freefunc_type(freefunc))
#define sk_X509_EXTENSION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), (idx))
#define sk_X509_EXTENSION_set(sk, idx, ptr) ((X509_EXTENSION *)OPENSSL_sk_set(ossl_check_X509_EXTENSION_sk_type(sk), (idx), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), pnum)
#define sk_X509_EXTENSION_sort(sk) OPENSSL_sk_sort(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_dup(sk) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_dup(ossl_check_const_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_copyfunc_type(copyfunc), ossl_check_X509_EXTENSION_freefunc_type(freefunc)))
#define sk_X509_EXTENSION_set_cmp_func(sk, cmp) ((sk_X509_EXTENSION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_compfunc_type(cmp)))

typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS;
typedef struct x509_attributes_st X509_ATTRIBUTE;
SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE)
#define sk_X509_ATTRIBUTE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_value(sk, idx) ((X509_ATTRIBUTE *)OPENSSL_sk_value(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), (idx)))
#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))
#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_null())
#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n)))
#define sk_X509_ATTRIBUTE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ATTRIBUTE_sk_type(sk), (n))
#define sk_X509_ATTRIBUTE_free(sk) OPENSSL_sk_free(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_delete(sk, i) ((X509_ATTRIBUTE *)OPENSSL_sk_delete(ossl_check_X509_ATTRIBUTE_sk_type(sk), (i)))
#define sk_X509_ATTRIBUTE_delete_ptr(sk, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_delete_ptr(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_pop(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_pop(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_shift(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_shift(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk),ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc))
#define sk_X509_ATTRIBUTE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), (idx))
#define sk_X509_ATTRIBUTE_set(sk, idx, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_set(ossl_check_X509_ATTRIBUTE_sk_type(sk), (idx), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), pnum)
#define sk_X509_ATTRIBUTE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_dup(sk) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_dup(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_copyfunc_type(copyfunc), ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)))
#define sk_X509_ATTRIBUTE_set_cmp_func(sk, cmp) ((sk_X509_ATTRIBUTE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))

typedef struct X509_req_info_st X509_REQ_INFO;
typedef struct X509_req_st X509_REQ;
typedef struct x509_cert_aux_st X509_CERT_AUX;
typedef struct x509_cinf_st X509_CINF;

/* Flags for X509_print_ex() */

# define X509_FLAG_COMPAT                0
# define X509_FLAG_NO_HEADER             1L
# define X509_FLAG_NO_VERSION            (1L << 1)
# define X509_FLAG_NO_SERIAL             (1L << 2)
# define X509_FLAG_NO_SIGNAME            (1L << 3)
# define X509_FLAG_NO_ISSUER             (1L << 4)
# define X509_FLAG_NO_VALIDITY           (1L << 5)
# define X509_FLAG_NO_SUBJECT            (1L << 6)
# define X509_FLAG_NO_PUBKEY             (1L << 7)
# define X509_FLAG_NO_EXTENSIONS         (1L << 8)
# define X509_FLAG_NO_SIGDUMP            (1L << 9)
# define X509_FLAG_NO_AUX                (1L << 10)
# define X509_FLAG_NO_ATTRIBUTES         (1L << 11)
# define X509_FLAG_NO_IDS                (1L << 12)
# define X509_FLAG_EXTENSIONS_ONLY_KID   (1L << 13)

/* Flags specific to X509_NAME_print_ex() */

/* The field separator information */

# define XN_FLAG_SEP_MASK        (0xf << 16)

# define XN_FLAG_COMPAT          0/* Traditional; use old X509_NAME_print */
# define XN_FLAG_SEP_COMMA_PLUS  (1 << 16)/* RFC2253 ,+ */
# define XN_FLAG_SEP_CPLUS_SPC   (2 << 16)/* ,+ spaced: more readable */
# define XN_FLAG_SEP_SPLUS_SPC   (3 << 16)/* ;+ spaced */
# define XN_FLAG_SEP_MULTILINE   (4 << 16)/* One line per field */

# define XN_FLAG_DN_REV          (1 << 20)/* Reverse DN order */

/* How the field name is shown */

# define XN_FLAG_FN_MASK         (0x3 << 21)

# define XN_FLAG_FN_SN           0/* Object short name */
# define XN_FLAG_FN_LN           (1 << 21)/* Object long name */
# define XN_FLAG_FN_OID          (2 << 21)/* Always use OIDs */
# define XN_FLAG_FN_NONE         (3 << 21)/* No field names */

# define XN_FLAG_SPC_EQ          (1 << 23)/* Put spaces round '=' */

/*
 * This determines if we dump fields we don't recognise: RFC2253 requires
 * this.
 */

# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24)

# define XN_FLAG_FN_ALIGN        (1 << 25)/* Align field names to 20
                                           * characters */

/* Complete set of RFC2253 flags */

# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \
                        XN_FLAG_SEP_COMMA_PLUS | \
                        XN_FLAG_DN_REV | \
                        XN_FLAG_FN_SN | \
                        XN_FLAG_DUMP_UNKNOWN_FIELDS)

/* readable oneline form */

# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \
                        ASN1_STRFLGS_ESC_QUOTE | \
                        XN_FLAG_SEP_CPLUS_SPC | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_SN)

/* readable multiline form */

# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \
                        ASN1_STRFLGS_ESC_MSB | \
                        XN_FLAG_SEP_MULTILINE | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_LN | \
                        XN_FLAG_FN_ALIGN)

typedef struct X509_crl_info_st X509_CRL_INFO;

typedef struct private_key_st {
    int version;
    /* The PKCS#8 data types */
    X509_ALGOR *enc_algor;
    ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */
    /* When decrypted, the following will not be NULL */
    EVP_PKEY *dec_pkey;
    /* used to encrypt and decrypt */
    int key_length;
    char *key_data;
    int key_free;               /* true if we should auto free key_data */
    /* expanded version of 'enc_algor' */
    EVP_CIPHER_INFO cipher;
} X509_PKEY;

typedef struct X509_info_st {
    X509 *x509;
    X509_CRL *crl;
    X509_PKEY *x_pkey;
    EVP_CIPHER_INFO enc_cipher;
    int enc_len;
    char *enc_data;
} X509_INFO;
SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO)
#define sk_X509_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_value(sk, idx) ((X509_INFO *)OPENSSL_sk_value(ossl_check_const_X509_INFO_sk_type(sk), (idx)))
#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp)))
#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_null())
#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n)))
#define sk_X509_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_INFO_sk_type(sk), (n))
#define sk_X509_INFO_free(sk) OPENSSL_sk_free(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_delete(sk, i) ((X509_INFO *)OPENSSL_sk_delete(ossl_check_X509_INFO_sk_type(sk), (i)))
#define sk_X509_INFO_delete_ptr(sk, ptr) ((X509_INFO *)OPENSSL_sk_delete_ptr(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_pop(sk) ((X509_INFO *)OPENSSL_sk_pop(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_shift(sk) ((X509_INFO *)OPENSSL_sk_shift(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk),ossl_check_X509_INFO_freefunc_type(freefunc))
#define sk_X509_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), (idx))
#define sk_X509_INFO_set(sk, idx, ptr) ((X509_INFO *)OPENSSL_sk_set(ossl_check_X509_INFO_sk_type(sk), (idx), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), pnum)
#define sk_X509_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_dup(sk) ((STACK_OF(X509_INFO) *)OPENSSL_sk_dup(ossl_check_const_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_INFO_sk_type(sk), ossl_check_X509_INFO_copyfunc_type(copyfunc), ossl_check_X509_INFO_freefunc_type(freefunc)))
#define sk_X509_INFO_set_cmp_func(sk, cmp) ((sk_X509_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_compfunc_type(cmp)))


/*
 * The next 2 structures and their 8 routines are used to manipulate Netscape's
 * spki structures - useful if you are writing a CA web page
 */
typedef struct Netscape_spkac_st {
    X509_PUBKEY *pubkey;
    ASN1_IA5STRING *challenge;  /* challenge sent in atlas >= PR2 */
} NETSCAPE_SPKAC;

typedef struct Netscape_spki_st {
    NETSCAPE_SPKAC *spkac;      /* signed public key and challenge */
    X509_ALGOR sig_algor;
    ASN1_BIT_STRING *signature;
} NETSCAPE_SPKI;

/* Netscape certificate sequence structure */
typedef struct Netscape_certificate_sequence {
    ASN1_OBJECT *type;
    STACK_OF(X509) *certs;
} NETSCAPE_CERT_SEQUENCE;

/*- Unused (and iv length is wrong)
typedef struct CBCParameter_st
        {
        unsigned char iv[8];
        } CBC_PARAM;
*/

/* Password based encryption structure */

typedef struct PBEPARAM_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *iter;
} PBEPARAM;

/* Password based encryption V2 structures */

typedef struct PBE2PARAM_st {
    X509_ALGOR *keyfunc;
    X509_ALGOR *encryption;
} PBE2PARAM;

typedef struct PBKDF2PARAM_st {
/* Usually OCTET STRING but could be anything */
    ASN1_TYPE *salt;
    ASN1_INTEGER *iter;
    ASN1_INTEGER *keylength;
    X509_ALGOR *prf;
} PBKDF2PARAM;

#ifndef OPENSSL_NO_SCRYPT
typedef struct SCRYPT_PARAMS_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *costParameter;
    ASN1_INTEGER *blockSize;
    ASN1_INTEGER *parallelizationParameter;
    ASN1_INTEGER *keyLength;
} SCRYPT_PARAMS;
#endif

#ifdef  __cpluspl