docs\\5-cinq.html 167 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706
  1. <!DOCTYPE html><html lang="zh-cmn-Hans"><head>
  2. <meta charset="utf-8">
  3. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  4. <style type="text/css">
  5. .anim-fade-in{-webkit-animation-name:fade-in;animation-name:fade-in;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.anim-fade-in.fast{-webkit-animation-duration:300ms;animation-duration:300ms}@-webkit-keyframes fade-in{0%{opacity:0}100%{opacity:1}}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}.anim-fade-up{opacity:0;-webkit-animation-name:fade-up;animation-name:fade-up;-webkit-animation-duration:0.3s;animation-duration:0.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-delay:1s;animation-delay:1s}@-webkit-keyframes fade-up{0%{opacity:0.8;-webkit-transform:translateY(100%);transform:translateY(100%)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fade-up{0%{opacity:0.8;-webkit-transform:translateY(100%);transform:translateY(100%)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.anim-fade-down{-webkit-animation-name:fade-down;animation-name:fade-down;-webkit-animation-duration:0.3s;animation-duration:0.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes fade-down{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0.5;-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes fade-down{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0.5;-webkit-transform:translateY(100%);transform:translateY(100%)}}.anim-grow-x{width:0%;-webkit-animation-name:grow-x;animation-name:grow-x;-webkit-animation-duration:0.3s;animation-duration:0.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-delay:0.5s;animation-delay:0.5s}@-webkit-keyframes grow-x{to{width:100%}}@keyframes grow-x{to{width:100%}}.anim-shrink-x{-webkit-animation-name:shrink-x;animation-name:shrink-x;-webkit-animation-duration:0.3s;animation-duration:0.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-delay:0.5s;animation-delay:0.5s}@-webkit-keyframes shrink-x{to{width:0%}}@keyframes shrink-x{to{width:0%}}.anim-scale-in{-webkit-animation-name:scale-in;animation-name:scale-in;-webkit-animation-duration:0.15s;animation-duration:0.15s;-webkit-animation-timing-function:cubic-bezier(0.2, 0, 0.13, 1.5);animation-timing-function:cubic-bezier(0.2, 0, 0.13, 1.5)}@-webkit-keyframes scale-in{0%{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes scale-in{0%{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.anim-pulse{-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}@-webkit-keyframes pulse{0%{opacity:0.3}10%{opacity:1}100%{opacity:0.3}}@keyframes pulse{0%{opacity:0.3}10%{opacity:1}100%{opacity:0.3}}.anim-pulse-in{-webkit-animation-name:pulse-in;animation-name:pulse-in;-webkit-animation-duration:0.5s;animation-duration:0.5s}@-webkit-keyframes pulse-in{0%{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}50%{-webkit-transform:scale3d(1.1, 1.1, 1.1);transform:scale3d(1.1, 1.1, 1.1)}100%{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}@keyframes pulse-in{0%{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}50%{-webkit-transform:scale3d(1.1, 1.1, 1.1);transform:scale3d(1.1, 1.1, 1.1)}100%{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}.border{border:1px #e1e4e8 solid !important}.border-top{border-top:1px #e1e4e8 solid !important}.border-right{border-right:1px #e1e4e8 solid !important}.border-bottom{border-bottom:1px #e1e4e8 solid !important}.border-left{border-left:1px #e1e4e8 solid !important}.border-y{border-top:1px #e1e4e8 solid !important;border-bottom:1px #e1e4e8 solid !important}.border-dashed{border-style:dashed !important}.border-blue{border-color:#0366d6 !important}.border-blue-light{border-color:#c8e1ff !important}.border-green{border-color:#34d058 !important}.border-green-light{border-color:#a2cbac !important}.border-red{border-color:#d73a49 !important}.border-red-light{border-color:#cea0a5 !important}.border-purple{border-color:#6f42c1 !important}.border-yellow{border-color:#d9d0a5 !important}.border-gray-light{border-color:#eaecef !important}.border-gray-dark{border-color:#d1d5da !important}.border-black-fade{border-color:rgba(27,31,35,0.15) !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:3px !important}.rounded-2{border-radius:6px !important}.box-shadow{box-shadow:0 1px 1px rgba(0,0,0,0.1) !important}.box-shadow-medium{box-shadow:0 1px 5px rgba(0,0,0,0.15) !important}.box-shadow-large{box-shadow:0 1px 15px rgba(0,0,0,0.15) !important}.box-shadow-extra-large{box-shadow:0 10px 50px rgba(0,0,0,0.07) !important}.box-shadow-none{box-shadow:none !important}.bg-white{background-color:#fff !important}.bg-blue{background-color:#0366d6 !important}.bg-blue-light{background-color:#f1f8ff !important}.bg-gray-dark{background-color:#24292e !important}.bg-gray{background-color:#f6f8fa !important}.bg-gray-light{background-color:#fafbfc !important}.bg-green{background-color:#28a745 !important}.bg-green-light{background-color:#dcffe4 !important}.bg-red{background-color:#d73a49 !important}.bg-red-light{background-color:#ffdce0 !important}.bg-yellow{background-color:#ffd33d !important}.bg-yellow-light{background-color:#fff5b1 !important}.bg-purple{background-color:#6f42c1 !important}.bg-purple-light{background-color:#f5f0ff !important}.bg-shade-gradient{background-image:-webkit-linear-gradient(270deg, rgba(0,0,0,0.065), transparent) !important;background-image:linear-gradient(180deg, rgba(0,0,0,0.065), transparent) !important;background-repeat:no-repeat !important;background-size:100% 200px !important}.text-blue{color:#0366d6 !important}.text-red{color:#cb2431 !important}.text-gray-light{color:#6a737d !important}.text-gray{color:#586069 !important}.text-gray-dark{color:#24292e !important}.text-green{color:#28a745 !important}.text-orange{color:#a04100 !important}.text-orange-light{color:#e36209 !important}.text-purple{color:#6f42c1 !important}.text-white{color:#fff !important}.text-inherit{color:inherit !important}.text-pending{color:#b08800 !important}.bg-pending{color:#dbab09 !important}.link-gray{color:#586069 !important}.link-gray:hover{color:#0366d6 !important}.link-gray-dark{color:#24292e !important}.link-gray-dark:hover{color:#0366d6 !important}.link-hover-blue:hover{color:#0366d6 !important}.muted-link{color:#586069 !important}.muted-link:hover{color:#0366d6 !important;text-decoration:none}.flex-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-webkit-flex-direction:row !important;flex-direction:row !important}.flex-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-webkit-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-webkit-flex-direction:column !important;flex-direction:column !important}.flex-wrap{-webkit-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-nowrap{-webkit-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-justify-start{-webkit-box-pack:start !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important}.flex-justify-end{-webkit-box-pack:end !important;-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.flex-justify-center{-webkit-box-pack:center !important;-webkit-justify-content:center !important;justify-content:center !important}.flex-justify-between{-webkit-box-pack:justify !important;-webkit-justify-content:space-between !important;justify-content:space-between !important}.flex-justify-around{-webkit-justify-content:space-around !important;justify-content:space-around !important}.flex-items-start{-webkit-box-align:start !important;-webkit-align-items:flex-start !important;align-items:flex-start !important}.flex-items-end{-webkit-box-align:end !important;-webkit-align-items:flex-end !important;align-items:flex-end !important}.flex-items-center{-webkit-box-align:center !important;-webkit-align-items:center !important;align-items:center !important}.flex-items-baseline{-webkit-box-align:baseline !important;-webkit-align-items:baseline !important;align-items:baseline !important}.flex-items-stretch{-webkit-box-align:stretch !important;-webkit-align-items:stretch !important;align-items:stretch !important}.flex-content-start{-webkit-align-content:flex-start !important;align-content:flex-start !important}.flex-content-end{-webkit-align-content:flex-end !important;align-content:flex-end !important}.flex-content-center{-webkit-align-content:center !important;align-content:center !important}.flex-content-between{-webkit-align-content:space-between !important;align-content:space-between !important}.flex-content-around{-webkit-align-content:space-around !important;align-content:space-around !important}.flex-content-stretch{-webkit-align-content:stretch !important;align-content:stretch !important}.flex-auto{-webkit-box-flex:1 !important;-webkit-flex:1 1 auto !important;flex:1 1 auto !important}.flex-shrink-0{-webkit-flex-shrink:0 !important;flex-shrink:0 !important}.flex-self-auto{-webkit-align-self:auto !important;align-self:auto !important}.flex-self-start{-webkit-align-self:flex-start !important;align-self:flex-start !important}.flex-self-end{-webkit-align-self:flex-end !important;align-self:flex-end !important}.flex-self-center{-webkit-align-self:center !important;align-self:center !important}.flex-self-baseline{-webkit-align-self:baseline !important;align-self:baseline !important}.flex-self-stretch{-webkit-align-self:stretch !important;align-self:stretch !important}.flex-item-equal{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:0;flex-basis:0}@media (min-width: 544px){.flex-sm-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-webkit-flex-direction:row !important;flex-direction:row !important}.flex-sm-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-webkit-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-sm-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-webkit-flex-direction:column !important;flex-direction:column !important}.flex-sm-wrap{-webkit-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-sm-nowrap{-webkit-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-sm-justify-start{-webkit-box-pack:start !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important}.flex-sm-justify-end{-webkit-box-pack:end !important;-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.flex-sm-justify-center{-webkit-box-pack:center !important;-webkit-justify-content:center !important;justify-content:center !important}.flex-sm-justify-between{-webkit-box-pack:justify !important;-webkit-justify-content:space-between !important;justify-content:space-between !important}.flex-sm-justify-around{-webkit-justify-content:space-around !important;justify-content:space-around !important}.flex-sm-items-start{-webkit-box-align:start !important;-webkit-align-items:flex-start !important;align-items:flex-start !important}.flex-sm-items-end{-webkit-box-align:end !important;-webkit-align-items:flex-end !important;align-items:flex-end !important}.flex-sm-items-center{-webkit-box-align:center !important;-webkit-align-items:center !important;align-items:center !important}.flex-sm-items-baseline{-webkit-box-align:baseline !important;-webkit-align-items:baseline !important;align-items:baseline !important}.flex-sm-items-stretch{-webkit-box-align:stretch !important;-webkit-align-items:stretch !important;align-items:stretch !important}.flex-sm-content-start{-webkit-align-content:flex-start !important;align-content:flex-start !important}.flex-sm-content-end{-webkit-align-content:flex-end !important;align-content:flex-end !important}.flex-sm-content-center{-webkit-align-content:center !important;align-content:center !important}.flex-sm-content-between{-webkit-align-content:space-between !important;align-content:space-between !important}.flex-sm-content-around{-webkit-align-content:space-around !important;align-content:space-around !important}.flex-sm-content-stretch{-webkit-align-content:stretch !important;align-content:stretch !important}.flex-sm-auto{-webkit-box-flex:1 !important;-webkit-flex:1 1 auto !important;flex:1 1 auto !important}.flex-sm-shrink-0{-webkit-flex-shrink:0 !important;flex-shrink:0 !important}.flex-sm-self-auto{-webkit-align-self:auto !important;align-self:auto !important}.flex-sm-self-start{-webkit-align-self:flex-start !important;align-self:flex-start !important}.flex-sm-self-end{-webkit-align-self:flex-end !important;align-self:flex-end !important}.flex-sm-self-center{-webkit-align-self:center !important;align-self:center !important}.flex-sm-self-baseline{-webkit-align-self:baseline !important;align-self:baseline !important}.flex-sm-self-stretch{-webkit-align-self:stretch !important;align-self:stretch !important}.flex-sm-item-equal{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:0;flex-basis:0}}@media (min-width: 768px){.flex-md-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-webkit-flex-direction:row !important;flex-direction:row !important}.flex-md-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-webkit-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-md-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-webkit-flex-direction:column !important;flex-direction:column !important}.flex-md-wrap{-webkit-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-md-nowrap{-webkit-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-md-justify-start{-webkit-box-pack:start !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important}.flex-md-justify-end{-webkit-box-pack:end !important;-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.flex-md-justify-center{-webkit-box-pack:center !important;-webkit-justify-content:center !important;justify-content:center !important}.flex-md-justify-between{-webkit-box-pack:justify !important;-webkit-justify-content:space-between !important;justify-content:space-between !important}.flex-md-justify-around{-webkit-justify-content:space-around !important;justify-content:space-around !important}.flex-md-items-start{-webkit-box-align:start !important;-webkit-align-items:flex-start !important;align-items:flex-start !important}.flex-md-items-end{-webkit-box-align:end !important;-webkit-align-items:flex-end !important;align-items:flex-end !important}.flex-md-items-center{-webkit-box-align:center !important;-webkit-align-items:center !important;align-items:center !important}.flex-md-items-baseline{-webkit-box-align:baseline !important;-webkit-align-items:baseline !important;align-items:baseline !important}.flex-md-items-stretch{-webkit-box-align:stretch !important;-webkit-align-items:stretch !important;align-items:stretch !important}.flex-md-content-start{-webkit-align-content:flex-start !important;align-content:flex-start !important}.flex-md-content-end{-webkit-align-content:flex-end !important;align-content:flex-end !important}.flex-md-content-center{-webkit-align-content:center !important;align-content:center !important}.flex-md-content-between{-webkit-align-content:space-between !important;align-content:space-between !important}.flex-md-content-around{-webkit-align-content:space-around !important;align-content:space-around !important}.flex-md-content-stretch{-webkit-align-content:stretch !important;align-content:stretch !important}.flex-md-auto{-webkit-box-flex:1 !important;-webkit-flex:1 1 auto !important;flex:1 1 auto !important}.flex-md-shrink-0{-webkit-flex-shrink:0 !important;flex-shrink:0 !important}.flex-md-self-auto{-webkit-align-self:auto !important;align-self:auto !important}.flex-md-self-start{-webkit-align-self:flex-start !important;align-self:flex-start !important}.flex-md-self-end{-webkit-align-self:flex-end !important;align-self:flex-end !important}.flex-md-self-center{-webkit-align-self:center !important;align-self:center !important}.flex-md-self-baseline{-webkit-align-self:baseline !important;align-self:baseline !important}.flex-md-self-stretch{-webkit-align-self:stretch !important;align-self:stretch !important}.flex-md-item-equal{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:0;flex-basis:0}}@media (min-width: 1012px){.flex-lg-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-webkit-flex-direction:row !important;flex-direction:row !important}.flex-lg-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-webkit-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-lg-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-webkit-flex-direction:column !important;flex-direction:column !important}.flex-lg-wrap{-webkit-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-lg-nowrap{-webkit-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-lg-justify-start{-webkit-box-pack:start !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important}.flex-lg-justify-end{-webkit-box-pack:end !important;-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.flex-lg-justify-center{-webkit-box-pack:center !important;-webkit-justify-content:center !important;justify-content:center !important}.flex-lg-justify-between{-webkit-box-pack:justify !important;-webkit-justify-content:space-between !important;justify-content:space-between !important}.flex-lg-justify-around{-webkit-justify-content:space-around !important;justify-content:space-around !important}.flex-lg-items-start{-webkit-box-align:start !important;-webkit-align-items:flex-start !important;align-items:flex-start !important}.flex-lg-items-end{-webkit-box-align:end !important;-webkit-align-items:flex-end !important;align-items:flex-end !important}.flex-lg-items-center{-webkit-box-align:center !important;-webkit-align-items:center !important;align-items:center !important}.flex-lg-items-baseline{-webkit-box-align:baseline !important;-webkit-align-items:baseline !important;align-items:baseline !important}.flex-lg-items-stretch{-webkit-box-align:stretch !important;-webkit-align-items:stretch !important;align-items:stretch !important}.flex-lg-content-start{-webkit-align-content:flex-start !important;align-content:flex-start !important}.flex-lg-content-end{-webkit-align-content:flex-end !important;align-content:flex-end !important}.flex-lg-content-center{-webkit-align-content:center !important;align-content:center !important}.flex-lg-content-between{-webkit-align-content:space-between !important;align-content:space-between !important}.flex-lg-content-around{-webkit-align-content:space-around !important;align-content:space-around !important}.flex-lg-content-stretch{-webkit-align-content:stretch !important;align-content:stretch !important}.flex-lg-auto{-webkit-box-flex:1 !important;-webkit-flex:1 1 auto !important;flex:1 1 auto !important}.flex-lg-shrink-0{-webkit-flex-shrink:0 !important;flex-shrink:0 !important}.flex-lg-self-auto{-webkit-align-self:auto !important;align-self:auto !important}.flex-lg-self-start{-webkit-align-self:flex-start !important;align-self:flex-start !important}.flex-lg-self-end{-webkit-align-self:flex-end !important;align-self:flex-end !important}.flex-lg-self-center{-webkit-align-self:center !important;align-self:center !important}.flex-lg-self-baseline{-webkit-align-self:baseline !important;align-self:baseline !important}.flex-lg-self-stretch{-webkit-align-self:stretch !important;align-self:stretch !important}.flex-lg-item-equal{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:0;flex-basis:0}}@media (min-width: 1280px){.flex-xl-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-webkit-flex-direction:row !important;flex-direction:row !important}.flex-xl-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-webkit-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-xl-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-webkit-flex-direction:column !important;flex-direction:column !important}.flex-xl-wrap{-webkit-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-xl-nowrap{-webkit-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-xl-justify-start{-webkit-box-pack:start !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important}.flex-xl-justify-end{-webkit-box-pack:end !important;-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.flex-xl-justify-center{-webkit-box-pack:center !important;-webkit-justify-content:center !important;justify-content:center !important}.flex-xl-justify-between{-webkit-box-pack:justify !important;-webkit-justify-content:space-between !important;justify-content:space-between !important}.flex-xl-justify-around{-webkit-justify-content:space-around !important;justify-content:space-around !important}.flex-xl-items-start{-webkit-box-align:start !important;-webkit-align-items:flex-start !important;align-items:flex-start !important}.flex-xl-items-end{-webkit-box-align:end !important;-webkit-align-items:flex-end !important;align-items:flex-end !important}.flex-xl-items-center{-webkit-box-align:center !important;-webkit-align-items:center !important;align-items:center !important}.flex-xl-items-baseline{-webkit-box-align:baseline !important;-webkit-align-items:baseline !important;align-items:baseline !important}.flex-xl-items-stretch{-webkit-box-align:stretch !important;-webkit-align-items:stretch !important;align-items:stretch !important}.flex-xl-content-start{-webkit-align-content:flex-start !important;align-content:flex-start !important}.flex-xl-content-end{-webkit-align-content:flex-end !important;align-content:flex-end !important}.flex-xl-content-center{-webkit-align-content:center !important;align-content:center !important}.flex-xl-content-between{-webkit-align-content:space-between !important;align-content:space-between !important}.flex-xl-content-around{-webkit-align-content:space-around !important;align-content:space-around !important}.flex-xl-content-stretch{-webkit-align-content:stretch !important;align-content:stretch !important}.flex-xl-auto{-webkit-box-flex:1 !important;-webkit-flex:1 1 auto !important;flex:1 1 auto !important}.flex-xl-shrink-0{-webkit-flex-shrink:0 !important;flex-shrink:0 !important}.flex-xl-self-auto{-webkit-align-self:auto !important;align-self:auto !important}.flex-xl-self-start{-webkit-align-self:flex-start !important;align-self:flex-start !important}.flex-xl-self-end{-webkit-align-self:flex-end !important;align-self:flex-end !important}.flex-xl-self-center{-webkit-align-self:center !important;align-self:center !important}.flex-xl-self-baseline{-webkit-align-self:baseline !important;align-self:baseline !important}.flex-xl-self-stretch{-webkit-align-self:stretch !important;align-self:stretch !important}.flex-xl-item-equal{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:0;flex-basis:0}}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.top-0{top:0 !important}.right-0{right:0 !important}.bottom-0{bottom:0 !important}.left-0{left:0 !important}.v-align-middle{vertical-align:middle !important}.v-align-top{vertical-align:top !important}.v-align-bottom{vertical-align:bottom !important}.v-align-text-top{vertical-align:text-top !important}.v-align-text-bottom{vertical-align:text-bottom !important}.overflow-hidden{overflow:hidden !important}.overflow-scroll{overflow:scroll !important}.overflow-auto{overflow:auto !important}.clearfix::before{display:table;content:""}.clearfix::after{display:table;clear:both;content:""}.float-right{float:right !important}.float-left{float:left !important}.float-none{float:none !important}@media (min-width: 544px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 1012px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1280px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.width-fit{max-width:100% !important}.width-full{width:100% !important}.height-full{height:100% !important}.min-width-0{min-width:0 !important}.direction-rtl{direction:rtl !important}.direction-ltr{direction:ltr !important}@media (min-width: 544px){.direction-sm-rtl{direction:rtl !important}.direction-sm-ltr{direction:ltr !important}}@media (min-width: 768px){.direction-md-rtl{direction:rtl !important}.direction-md-ltr{direction:ltr !important}}@media (min-width: 1012px){.direction-lg-rtl{direction:rtl !important}.direction-lg-ltr{direction:ltr !important}}@media (min-width: 1280px){.direction-xl-rtl{direction:rtl !important}.direction-xl-ltr{direction:ltr !important}}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mt-n0{margin-top:-0 !important}.mr-n0{margin-right:-0 !important}.mb-n0{margin-bottom:-0 !important}.ml-n0{margin-left:-0 !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:4px !important}.mt-1{margin-top:4px !important}.mr-1{margin-right:4px !important}.mb-1{margin-bottom:4px !important}.ml-1{margin-left:4px !important}.mt-n1{margin-top:-4px !important}.mr-n1{margin-right:-4px !important}.mb-n1{margin-bottom:-4px !important}.ml-n1{margin-left:-4px !important}.mx-1{margin-right:4px !important;margin-left:4px !important}.my-1{margin-top:4px !important;margin-bottom:4px !important}.m-2{margin:8px !important}.mt-2{margin-top:8px !important}.mr-2{margin-right:8px !important}.mb-2{margin-bottom:8px !important}.ml-2{margin-left:8px !important}.mt-n2{margin-top:-8px !important}.mr-n2{margin-right:-8px !important}.mb-n2{margin-bottom:-8px !important}.ml-n2{margin-left:-8px !important}.mx-2{margin-right:8px !important;margin-left:8px !important}.my-2{margin-top:8px !important;margin-bottom:8px !important}.m-3{margin:16px !important}.mt-3{margin-top:16px !important}.mr-3{margin-right:16px !important}.mb-3{margin-bottom:16px !important}.ml-3{margin-left:16px !important}.mt-n3{margin-top:-16px !important}.mr-n3{margin-right:-16px !important}.mb-n3{margin-bottom:-16px !important}.ml-n3{margin-left:-16px !important}.mx-3{margin-right:16px !important;margin-left:16px !important}.my-3{margin-top:16px !important;margin-bottom:16px !important}.m-4{margin:24px !important}.mt-4{margin-top:24px !important}.mr-4{margin-right:24px !important}.mb-4{margin-bottom:24px !important}.ml-4{margin-left:24px !important}.mt-n4{margin-top:-24px !important}.mr-n4{margin-right:-24px !important}.mb-n4{margin-bottom:-24px !important}.ml-n4{margin-left:-24px !important}.mx-4{margin-right:24px !important;margin-left:24px !important}.my-4{margin-top:24px !important;margin-bottom:24px !important}.m-5{margin:32px !important}.mt-5{margin-top:32px !important}.mr-5{margin-right:32px !important}.mb-5{margin-bottom:32px !important}.ml-5{margin-left:32px !important}.mt-n5{margin-top:-32px !important}.mr-n5{margin-right:-32px !important}.mb-n5{margin-bottom:-32px !important}.ml-n5{margin-left:-32px !important}.mx-5{margin-right:32px !important;margin-left:32px !important}.my-5{margin-top:32px !important;margin-bottom:32px !important}.m-6{margin:40px !important}.mt-6{margin-top:40px !important}.mr-6{margin-right:40px !important}.mb-6{margin-bottom:40px !important}.ml-6{margin-left:40px !important}.mt-n6{margin-top:-40px !important}.mr-n6{margin-right:-40px !important}.mb-n6{margin-bottom:-40px !important}.ml-n6{margin-left:-40px !important}.mx-6{margin-right:40px !important;margin-left:40px !important}.my-6{margin-top:40px !important;margin-bottom:40px !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}@media (min-width: 544px){.m-sm-0{margin:0 !important}.mt-sm-0{margin-top:0 !important}.mr-sm-0{margin-right:0 !important}.mb-sm-0{margin-bottom:0 !important}.ml-sm-0{margin-left:0 !important}.mt-sm-n0{margin-top:-0 !important}.mr-sm-n0{margin-right:-0 !important}.mb-sm-n0{margin-bottom:-0 !important}.ml-sm-n0{margin-left:-0 !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}}@media (min-width: 544px){.m-sm-1{margin:4px !important}.mt-sm-1{margin-top:4px !important}.mr-sm-1{margin-right:4px !important}.mb-sm-1{margin-bottom:4px !important}.ml-sm-1{margin-left:4px !important}.mt-sm-n1{margin-top:-4px !important}.mr-sm-n1{margin-right:-4px !important}.mb-sm-n1{margin-bottom:-4px !important}.ml-sm-n1{margin-left:-4px !important}.mx-sm-1{margin-right:4px !important;margin-left:4px !important}.my-sm-1{margin-top:4px !important;margin-bottom:4px !important}}@media (min-width: 544px){.m-sm-2{margin:8px !important}.mt-sm-2{margin-top:8px !important}.mr-sm-2{margin-right:8px !important}.mb-sm-2{margin-bottom:8px !important}.ml-sm-2{margin-left:8px !important}.mt-sm-n2{margin-top:-8px !important}.mr-sm-n2{margin-right:-8px !important}.mb-sm-n2{margin-bottom:-8px !important}.ml-sm-n2{margin-left:-8px !important}.mx-sm-2{margin-right:8px !important;margin-left:8px !important}.my-sm-2{margin-top:8px !important;margin-bottom:8px !important}}@media (min-width: 544px){.m-sm-3{margin:16px !important}.mt-sm-3{margin-top:16px !important}.mr-sm-3{margin-right:16px !important}.mb-sm-3{margin-bottom:16px !important}.ml-sm-3{margin-left:16px !important}.mt-sm-n3{margin-top:-16px !important}.mr-sm-n3{margin-right:-16px !important}.mb-sm-n3{margin-bottom:-16px !important}.ml-sm-n3{margin-left:-16px !important}.mx-sm-3{margin-right:16px !important;margin-left:16px !important}.my-sm-3{margin-top:16px !important;margin-bottom:16px !important}}@media (min-width: 544px){.m-sm-4{margin:24px !important}.mt-sm-4{margin-top:24px !important}.mr-sm-4{margin-right:24px !important}.mb-sm-4{margin-bottom:24px !important}.ml-sm-4{margin-left:24px !important}.mt-sm-n4{margin-top:-24px !important}.mr-sm-n4{margin-right:-24px !important}.mb-sm-n4{margin-bottom:-24px !important}.ml-sm-n4{margin-left:-24px !important}.mx-sm-4{margin-right:24px !important;margin-left:24px !important}.my-sm-4{margin-top:24px !important;margin-bottom:24px !important}}@media (min-width: 544px){.m-sm-5{margin:32px !important}.mt-sm-5{margin-top:32px !important}.mr-sm-5{margin-right:32px !important}.mb-sm-5{margin-bottom:32px !important}.ml-sm-5{margin-left:32px !important}.mt-sm-n5{margin-top:-32px !important}.mr-sm-n5{margin-right:-32px !important}.mb-sm-n5{margin-bottom:-32px !important}.ml-sm-n5{margin-left:-32px !important}.mx-sm-5{margin-right:32px !important;margin-left:32px !important}.my-sm-5{margin-top:32px !important;margin-bottom:32px !important}}@media (min-width: 544px){.m-sm-6{margin:40px !important}.mt-sm-6{margin-top:40px !important}.mr-sm-6{margin-right:40px !important}.mb-sm-6{margin-bottom:40px !important}.ml-sm-6{margin-left:40px !important}.mt-sm-n6{margin-top:-40px !important}.mr-sm-n6{margin-right:-40px !important}.mb-sm-n6{margin-bottom:-40px !important}.ml-sm-n6{margin-left:-40px !important}.mx-sm-6{margin-right:40px !important;margin-left:40px !important}.my-sm-6{margin-top:40px !important;margin-bottom:40px !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0{margin-top:0 !important}.mr-md-0{margin-right:0 !important}.mb-md-0{margin-bottom:0 !important}.ml-md-0{margin-left:0 !important}.mt-md-n0{margin-top:-0 !important}.mr-md-n0{margin-right:-0 !important}.mb-md-n0{margin-bottom:-0 !important}.ml-md-n0{margin-left:-0 !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}}@media (min-width: 768px){.m-md-1{margin:4px !important}.mt-md-1{margin-top:4px !important}.mr-md-1{margin-right:4px !important}.mb-md-1{margin-bottom:4px !important}.ml-md-1{margin-left:4px !important}.mt-md-n1{margin-top:-4px !important}.mr-md-n1{margin-right:-4px !important}.mb-md-n1{margin-bottom:-4px !important}.ml-md-n1{margin-left:-4px !important}.mx-md-1{margin-right:4px !important;margin-left:4px !important}.my-md-1{margin-top:4px !important;margin-bottom:4px !important}}@media (min-width: 768px){.m-md-2{margin:8px !important}.mt-md-2{margin-top:8px !important}.mr-md-2{margin-right:8px !important}.mb-md-2{margin-bottom:8px !important}.ml-md-2{margin-left:8px !important}.mt-md-n2{margin-top:-8px !important}.mr-md-n2{margin-right:-8px !important}.mb-md-n2{margin-bottom:-8px !important}.ml-md-n2{margin-left:-8px !important}.mx-md-2{margin-right:8px !important;margin-left:8px !important}.my-md-2{margin-top:8px !important;margin-bottom:8px !important}}@media (min-width: 768px){.m-md-3{margin:16px !important}.mt-md-3{margin-top:16px !important}.mr-md-3{margin-right:16px !important}.mb-md-3{margin-bottom:16px !important}.ml-md-3{margin-left:16px !important}.mt-md-n3{margin-top:-16px !important}.mr-md-n3{margin-right:-16px !important}.mb-md-n3{margin-bottom:-16px !important}.ml-md-n3{margin-left:-16px !important}.mx-md-3{margin-right:16px !important;margin-left:16px !important}.my-md-3{margin-top:16px !important;margin-bottom:16px !important}}@media (min-width: 768px){.m-md-4{margin:24px !important}.mt-md-4{margin-top:24px !important}.mr-md-4{margin-right:24px !important}.mb-md-4{margin-bottom:24px !important}.ml-md-4{margin-left:24px !important}.mt-md-n4{margin-top:-24px !important}.mr-md-n4{margin-right:-24px !important}.mb-md-n4{margin-bottom:-24px !important}.ml-md-n4{margin-left:-24px !important}.mx-md-4{margin-right:24px !important;margin-left:24px !important}.my-md-4{margin-top:24px !important;margin-bottom:24px !important}}@media (min-width: 768px){.m-md-5{margin:32px !important}.mt-md-5{margin-top:32px !important}.mr-md-5{margin-right:32px !important}.mb-md-5{margin-bottom:32px !important}.ml-md-5{margin-left:32px !important}.mt-md-n5{margin-top:-32px !important}.mr-md-n5{margin-right:-32px !important}.mb-md-n5{margin-bottom:-32px !important}.ml-md-n5{margin-left:-32px !important}.mx-md-5{margin-right:32px !important;margin-left:32px !important}.my-md-5{margin-top:32px !important;margin-bottom:32px !important}}@media (min-width: 768px){.m-md-6{margin:40px !important}.mt-md-6{margin-top:40px !important}.mr-md-6{margin-right:40px !important}.mb-md-6{margin-bottom:40px !important}.ml-md-6{margin-left:40px !important}.mt-md-n6{margin-top:-40px !important}.mr-md-n6{margin-right:-40px !important}.mb-md-n6{margin-bottom:-40px !important}.ml-md-n6{margin-left:-40px !important}.mx-md-6{margin-right:40px !important;margin-left:40px !important}.my-md-6{margin-top:40px !important;margin-bottom:40px !important}}@media (min-width: 1012px){.m-lg-0{margin:0 !important}.mt-lg-0{margin-top:0 !important}.mr-lg-0{margin-right:0 !important}.mb-lg-0{margin-bottom:0 !important}.ml-lg-0{margin-left:0 !important}.mt-lg-n0{margin-top:-0 !important}.mr-lg-n0{margin-right:-0 !important}.mb-lg-n0{margin-bottom:-0 !important}.ml-lg-n0{margin-left:-0 !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}}@media (min-width: 1012px){.m-lg-1{margin:4px !important}.mt-lg-1{margin-top:4px !important}.mr-lg-1{margin-right:4px !important}.mb-lg-1{margin-bottom:4px !important}.ml-lg-1{margin-left:4px !important}.mt-lg-n1{margin-top:-4px !important}.mr-lg-n1{margin-right:-4px !important}.mb-lg-n1{margin-bottom:-4px !important}.ml-lg-n1{margin-left:-4px !important}.mx-lg-1{margin-right:4px !important;margin-left:4px !important}.my-lg-1{margin-top:4px !important;margin-bottom:4px !important}}@media (min-width: 1012px){.m-lg-2{margin:8px !important}.mt-lg-2{margin-top:8px !important}.mr-lg-2{margin-right:8px !important}.mb-lg-2{margin-bottom:8px !important}.ml-lg-2{margin-left:8px !important}.mt-lg-n2{margin-top:-8px !important}.mr-lg-n2{margin-right:-8px !important}.mb-lg-n2{margin-bottom:-8px !important}.ml-lg-n2{margin-left:-8px !important}.mx-lg-2{margin-right:8px !important;margin-left:8px !important}.my-lg-2{margin-top:8px !important;margin-bottom:8px !important}}@media (min-width: 1012px){.m-lg-3{margin:16px !important}.mt-lg-3{margin-top:16px !important}.mr-lg-3{margin-right:16px !important}.mb-lg-3{margin-bottom:16px !important}.ml-lg-3{margin-left:16px !important}.mt-lg-n3{margin-top:-16px !important}.mr-lg-n3{margin-right:-16px !important}.mb-lg-n3{margin-bottom:-16px !important}.ml-lg-n3{margin-left:-16px !important}.mx-lg-3{margin-right:16px !important;margin-left:16px !important}.my-lg-3{margin-top:16px !important;margin-bottom:16px !important}}@media (min-width: 1012px){.m-lg-4{margin:24px !important}.mt-lg-4{margin-top:24px !important}.mr-lg-4{margin-right:24px !important}.mb-lg-4{margin-bottom:24px !important}.ml-lg-4{margin-left:24px !important}.mt-lg-n4{margin-top:-24px !important}.mr-lg-n4{margin-right:-24px !important}.mb-lg-n4{margin-bottom:-24px !important}.ml-lg-n4{margin-left:-24px !important}.mx-lg-4{margin-right:24px !important;margin-left:24px !important}.my-lg-4{margin-top:24px !important;margin-bottom:24px !important}}@media (min-width: 1012px){.m-lg-5{margin:32px !important}.mt-lg-5{margin-top:32px !important}.mr-lg-5{margin-right:32px !important}.mb-lg-5{margin-bottom:32px !important}.ml-lg-5{margin-left:32px !important}.mt-lg-n5{margin-top:-32px !important}.mr-lg-n5{margin-right:-32px !important}.mb-lg-n5{margin-bottom:-32px !important}.ml-lg-n5{margin-left:-32px !important}.mx-lg-5{margin-right:32px !important;margin-left:32px !important}.my-lg-5{margin-top:32px !important;margin-bottom:32px !important}}@media (min-width: 1012px){.m-lg-6{margin:40px !important}.mt-lg-6{margin-top:40px !important}.mr-lg-6{margin-right:40px !important}.mb-lg-6{margin-bottom:40px !important}.ml-lg-6{margin-left:40px !important}.mt-lg-n6{margin-top:-40px !important}.mr-lg-n6{margin-right:-40px !important}.mb-lg-n6{margin-bottom:-40px !important}.ml-lg-n6{margin-left:-40px !important}.mx-lg-6{margin-right:40px !important;margin-left:40px !important}.my-lg-6{margin-top:40px !important;margin-bottom:40px !important}}@media (min-width: 1280px){.m-xl-0{margin:0 !important}.mt-xl-0{margin-top:0 !important}.mr-xl-0{margin-right:0 !important}.mb-xl-0{margin-bottom:0 !important}.ml-xl-0{margin-left:0 !important}.mt-xl-n0{margin-top:-0 !important}.mr-xl-n0{margin-right:-0 !important}.mb-xl-n0{margin-bottom:-0 !important}.ml-xl-n0{margin-left:-0 !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}}@media (min-width: 1280px){.m-xl-1{margin:4px !important}.mt-xl-1{margin-top:4px !important}.mr-xl-1{margin-right:4px !important}.mb-xl-1{margin-bottom:4px !important}.ml-xl-1{margin-left:4px !important}.mt-xl-n1{margin-top:-4px !important}.mr-xl-n1{margin-right:-4px !important}.mb-xl-n1{margin-bottom:-4px !important}.ml-xl-n1{margin-left:-4px !important}.mx-xl-1{margin-right:4px !important;margin-left:4px !important}.my-xl-1{margin-top:4px !important;margin-bottom:4px !important}}@media (min-width: 1280px){.m-xl-2{margin:8px !important}.mt-xl-2{margin-top:8px !important}.mr-xl-2{margin-right:8px !important}.mb-xl-2{margin-bottom:8px !important}.ml-xl-2{margin-left:8px !important}.mt-xl-n2{margin-top:-8px !important}.mr-xl-n2{margin-right:-8px !important}.mb-xl-n2{margin-bottom:-8px !important}.ml-xl-n2{margin-left:-8px !important}.mx-xl-2{margin-right:8px !important;margin-left:8px !important}.my-xl-2{margin-top:8px !important;margin-bottom:8px !important}}@media (min-width: 1280px){.m-xl-3{margin:16px !important}.mt-xl-3{margin-top:16px !important}.mr-xl-3{margin-right:16px !important}.mb-xl-3{margin-bottom:16px !important}.ml-xl-3{margin-left:16px !important}.mt-xl-n3{margin-top:-16px !important}.mr-xl-n3{margin-right:-16px !important}.mb-xl-n3{margin-bottom:-16px !important}.ml-xl-n3{margin-left:-16px !important}.mx-xl-3{margin-right:16px !important;margin-left:16px !important}.my-xl-3{margin-top:16px !important;margin-bottom:16px !important}}@media (min-width: 1280px){.m-xl-4{margin:24px !important}.mt-xl-4{margin-top:24px !important}.mr-xl-4{margin-right:24px !important}.mb-xl-4{margin-bottom:24px !important}.ml-xl-4{margin-left:24px !important}.mt-xl-n4{margin-top:-24px !important}.mr-xl-n4{margin-right:-24px !important}.mb-xl-n4{margin-bottom:-24px !important}.ml-xl-n4{margin-left:-24px !important}.mx-xl-4{margin-right:24px !important;margin-left:24px !important}.my-xl-4{margin-top:24px !important;margin-bottom:24px !important}}@media (min-width: 1280px){.m-xl-5{margin:32px !important}.mt-xl-5{margin-top:32px !important}.mr-xl-5{margin-right:32px !important}.mb-xl-5{margin-bottom:32px !important}.ml-xl-5{margin-left:32px !important}.mt-xl-n5{margin-top:-32px !important}.mr-xl-n5{margin-right:-32px !important}.mb-xl-n5{margin-bottom:-32px !important}.ml-xl-n5{margin-left:-32px !important}.mx-xl-5{margin-right:32px !important;margin-left:32px !important}.my-xl-5{margin-top:32px !important;margin-bottom:32px !important}}@media (min-width: 1280px){.m-xl-6{margin:40px !important}.mt-xl-6{margin-top:40px !important}.mr-xl-6{margin-right:40px !important}.mb-xl-6{margin-bottom:40px !important}.ml-xl-6{margin-left:40px !important}.mt-xl-n6{margin-top:-40px !important}.mr-xl-n6{margin-right:-40px !important}.mb-xl-n6{margin-bottom:-40px !important}.ml-xl-n6{margin-left:-40px !important}.mx-xl-6{margin-right:40px !important;margin-left:40px !important}.my-xl-6{margin-top:40px !important;margin-bottom:40px !important}}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-right:0 !important;padding-left:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:4px !important}.pt-1{padding-top:4px !important}.pr-1{padding-right:4px !important}.pb-1{padding-bottom:4px !important}.pl-1{padding-left:4px !important}.px-1{padding-right:4px !important;padding-left:4px !important}.py-1{padding-top:4px !important;padding-bottom:4px !important}.p-2{padding:8px !important}.pt-2{padding-top:8px !important}.pr-2{padding-right:8px !important}.pb-2{padding-bottom:8px !important}.pl-2{padding-left:8px !important}.px-2{padding-right:8px !important;padding-left:8px !important}.py-2{padding-top:8px !important;padding-bottom:8px !important}.p-3{padding:16px !important}.pt-3{padding-top:16px !important}.pr-3{padding-right:16px !important}.pb-3{padding-bottom:16px !important}.pl-3{padding-left:16px !important}.px-3{padding-right:16px !important;padding-left:16px !important}.py-3{padding-top:16px !important;padding-bottom:16px !important}.p-4{padding:24px !important}.pt-4{padding-top:24px !important}.pr-4{padding-right:24px !important}.pb-4{padding-bottom:24px !important}.pl-4{padding-left:24px !important}.px-4{padding-right:24px !important;padding-left:24px !important}.py-4{padding-top:24px !important;padding-bottom:24px !important}.p-5{padding:32px !important}.pt-5{padding-top:32px !important}.pr-5{padding-right:32px !important}.pb-5{padding-bottom:32px !important}.pl-5{padding-left:32px !important}.px-5{padding-right:32px !important;padding-left:32px !important}.py-5{padding-top:32px !important;padding-bottom:32px !important}.p-6{padding:40px !important}.pt-6{padding-top:40px !important}.pr-6{padding-right:40px !important}.pb-6{padding-bottom:40px !important}.pl-6{padding-left:40px !important}.px-6{padding-right:40px !important;padding-left:40px !important}.py-6{padding-top:40px !important;padding-bottom:40px !important}@media (min-width: 544px){.p-sm-0{padding:0 !important}.pt-sm-0{padding-top:0 !important}.pr-sm-0{padding-right:0 !important}.pb-sm-0{padding-bottom:0 !important}.pl-sm-0{padding-left:0 !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}}@media (min-width: 544px){.p-sm-1{padding:4px !important}.pt-sm-1{padding-top:4px !important}.pr-sm-1{padding-right:4px !important}.pb-sm-1{padding-bottom:4px !important}.pl-sm-1{padding-left:4px !important}.px-sm-1{padding-right:4px !important;padding-left:4px !important}.py-sm-1{padding-top:4px !important;padding-bottom:4px !important}}@media (min-width: 544px){.p-sm-2{padding:8px !important}.pt-sm-2{padding-top:8px !important}.pr-sm-2{padding-right:8px !important}.pb-sm-2{padding-bottom:8px !important}.pl-sm-2{padding-left:8px !important}.px-sm-2{padding-right:8px !important;padding-left:8px !important}.py-sm-2{padding-top:8px !important;padding-bottom:8px !important}}@media (min-width: 544px){.p-sm-3{padding:16px !important}.pt-sm-3{padding-top:16px !important}.pr-sm-3{padding-right:16px !important}.pb-sm-3{padding-bottom:16px !important}.pl-sm-3{padding-left:16px !important}.px-sm-3{padding-right:16px !important;padding-left:16px !important}.py-sm-3{padding-top:16px !important;padding-bottom:16px !important}}@media (min-width: 544px){.p-sm-4{padding:24px !important}.pt-sm-4{padding-top:24px !important}.pr-sm-4{padding-right:24px !important}.pb-sm-4{padding-bottom:24px !important}.pl-sm-4{padding-left:24px !important}.px-sm-4{padding-right:24px !important;padding-left:24px !important}.py-sm-4{padding-top:24px !important;padding-bottom:24px !important}}@media (min-width: 544px){.p-sm-5{padding:32px !important}.pt-sm-5{padding-top:32px !important}.pr-sm-5{padding-right:32px !important}.pb-sm-5{padding-bottom:32px !important}.pl-sm-5{padding-left:32px !important}.px-sm-5{padding-right:32px !important;padding-left:32px !important}.py-sm-5{padding-top:32px !important;padding-bottom:32px !important}}@media (min-width: 544px){.p-sm-6{padding:40px !important}.pt-sm-6{padding-top:40px !important}.pr-sm-6{padding-right:40px !important}.pb-sm-6{padding-bottom:40px !important}.pl-sm-6{padding-left:40px !important}.px-sm-6{padding-right:40px !important;padding-left:40px !important}.py-sm-6{padding-top:40px !important;padding-bottom:40px !important}}@media (min-width: 768px){.p-md-0{padding:0 !important}.pt-md-0{padding-top:0 !important}.pr-md-0{padding-right:0 !important}.pb-md-0{padding-bottom:0 !important}.pl-md-0{padding-left:0 !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}}@media (min-width: 768px){.p-md-1{padding:4px !important}.pt-md-1{padding-top:4px !important}.pr-md-1{padding-right:4px !important}.pb-md-1{padding-bottom:4px !important}.pl-md-1{padding-left:4px !important}.px-md-1{padding-right:4px !important;padding-left:4px !important}.py-md-1{padding-top:4px !important;padding-bottom:4px !important}}@media (min-width: 768px){.p-md-2{padding:8px !important}.pt-md-2{padding-top:8px !important}.pr-md-2{padding-right:8px !important}.pb-md-2{padding-bottom:8px !important}.pl-md-2{padding-left:8px !important}.px-md-2{padding-right:8px !important;padding-left:8px !important}.py-md-2{padding-top:8px !important;padding-bottom:8px !important}}@media (min-width: 768px){.p-md-3{padding:16px !important}.pt-md-3{padding-top:16px !important}.pr-md-3{padding-right:16px !important}.pb-md-3{padding-bottom:16px !important}.pl-md-3{padding-left:16px !important}.px-md-3{padding-right:16px !important;padding-left:16px !important}.py-md-3{padding-top:16px !important;padding-bottom:16px !important}}@media (min-width: 768px){.p-md-4{padding:24px !important}.pt-md-4{padding-top:24px !important}.pr-md-4{padding-right:24px !important}.pb-md-4{padding-bottom:24px !important}.pl-md-4{padding-left:24px !important}.px-md-4{padding-right:24px !important;padding-left:24px !important}.py-md-4{padding-top:24px !important;padding-bottom:24px !important}}@media (min-width: 768px){.p-md-5{padding:32px !important}.pt-md-5{padding-top:32px !important}.pr-md-5{padding-right:32px !important}.pb-md-5{padding-bottom:32px !important}.pl-md-5{padding-left:32px !important}.px-md-5{padding-right:32px !important;padding-left:32px !important}.py-md-5{padding-top:32px !important;padding-bottom:32px !important}}@media (min-width: 768px){.p-md-6{padding:40px !important}.pt-md-6{padding-top:40px !important}.pr-md-6{padding-right:40px !important}.pb-md-6{padding-bottom:40px !important}.pl-md-6{padding-left:40px !important}.px-md-6{padding-right:40px !important;padding-left:40px !important}.py-md-6{padding-top:40px !important;padding-bottom:40px !important}}@media (min-width: 1012px){.p-lg-0{padding:0 !important}.pt-lg-0{padding-top:0 !important}.pr-lg-0{padding-right:0 !important}.pb-lg-0{padding-bottom:0 !important}.pl-lg-0{padding-left:0 !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}}@media (min-width: 1012px){.p-lg-1{padding:4px !important}.pt-lg-1{padding-top:4px !important}.pr-lg-1{padding-right:4px !important}.pb-lg-1{padding-bottom:4px !important}.pl-lg-1{padding-left:4px !important}.px-lg-1{padding-right:4px !important;padding-left:4px !important}.py-lg-1{padding-top:4px !important;padding-bottom:4px !important}}@media (min-width: 1012px){.p-lg-2{padding:8px !important}.pt-lg-2{padding-top:8px !important}.pr-lg-2{padding-right:8px !important}.pb-lg-2{padding-bottom:8px !important}.pl-lg-2{padding-left:8px !important}.px-lg-2{padding-right:8px !important;padding-left:8px !important}.py-lg-2{padding-top:8px !important;padding-bottom:8px !important}}@media (min-width: 1012px){.p-lg-3{padding:16px !important}.pt-lg-3{padding-top:16px !important}.pr-lg-3{padding-right:16px !important}.pb-lg-3{padding-bottom:16px !important}.pl-lg-3{padding-left:16px !important}.px-lg-3{padding-right:16px !important;padding-left:16px !important}.py-lg-3{padding-top:16px !important;padding-bottom:16px !important}}@media (min-width: 1012px){.p-lg-4{padding:24px !important}.pt-lg-4{padding-top:24px !important}.pr-lg-4{padding-right:24px !important}.pb-lg-4{padding-bottom:24px !important}.pl-lg-4{padding-left:24px !important}.px-lg-4{padding-right:24px !important;padding-left:24px !important}.py-lg-4{padding-top:24px !important;padding-bottom:24px !important}}@media (min-width: 1012px){.p-lg-5{padding:32px !important}.pt-lg-5{padding-top:32px !important}.pr-lg-5{padding-right:32px !important}.pb-lg-5{padding-bottom:32px !important}.pl-lg-5{padding-left:32px !important}.px-lg-5{padding-right:32px !important;padding-left:32px !important}.py-lg-5{padding-top:32px !important;padding-bottom:32px !important}}@media (min-width: 1012px){.p-lg-6{padding:40px !important}.pt-lg-6{padding-top:40px !important}.pr-lg-6{padding-right:40px !important}.pb-lg-6{padding-bottom:40px !important}.pl-lg-6{padding-left:40px !important}.px-lg-6{padding-right:40px !important;padding-left:40px !important}.py-lg-6{padding-top:40px !important;padding-bottom:40px !important}}@media (min-width: 1280px){.p-xl-0{padding:0 !important}.pt-xl-0{padding-top:0 !important}.pr-xl-0{padding-right:0 !important}.pb-xl-0{padding-bottom:0 !important}.pl-xl-0{padding-left:0 !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}}@media (min-width: 1280px){.p-xl-1{padding:4px !important}.pt-xl-1{padding-top:4px !important}.pr-xl-1{padding-right:4px !important}.pb-xl-1{padding-bottom:4px !important}.pl-xl-1{padding-left:4px !important}.px-xl-1{padding-right:4px !important;padding-left:4px !important}.py-xl-1{padding-top:4px !important;padding-bottom:4px !important}}@media (min-width: 1280px){.p-xl-2{padding:8px !important}.pt-xl-2{padding-top:8px !important}.pr-xl-2{padding-right:8px !important}.pb-xl-2{padding-bottom:8px !important}.pl-xl-2{padding-left:8px !important}.px-xl-2{padding-right:8px !important;padding-left:8px !important}.py-xl-2{padding-top:8px !important;padding-bottom:8px !important}}@media (min-width: 1280px){.p-xl-3{padding:16px !important}.pt-xl-3{padding-top:16px !important}.pr-xl-3{padding-right:16px !important}.pb-xl-3{padding-bottom:16px !important}.pl-xl-3{padding-left:16px !important}.px-xl-3{padding-right:16px !important;padding-left:16px !important}.py-xl-3{padding-top:16px !important;padding-bottom:16px !important}}@media (min-width: 1280px){.p-xl-4{padding:24px !important}.pt-xl-4{padding-top:24px !important}.pr-xl-4{padding-right:24px !important}.pb-xl-4{padding-bottom:24px !important}.pl-xl-4{padding-left:24px !important}.px-xl-4{padding-right:24px !important;padding-left:24px !important}.py-xl-4{padding-top:24px !important;padding-bottom:24px !important}}@media (min-width: 1280px){.p-xl-5{padding:32px !important}.pt-xl-5{padding-top:32px !important}.pr-xl-5{padding-right:32px !important}.pb-xl-5{padding-bottom:32px !important}.pl-xl-5{padding-left:32px !important}.px-xl-5{padding-right:32px !important;padding-left:32px !important}.py-xl-5{padding-top:32px !important;padding-bottom:32px !important}}@media (min-width: 1280px){.p-xl-6{padding:40px !important}.pt-xl-6{padding-top:40px !important}.pr-xl-6{padding-right:40px !important}.pb-xl-6{padding-bottom:40px !important}.pl-xl-6{padding-left:40px !important}.px-xl-6{padding-right:40px !important;padding-left:40px !important}.py-xl-6{padding-top:40px !important;padding-bottom:40px !important}}.h1{font-size:26px !important}@media (min-width: 768px){.h1{font-size:32px !important}}.h2{font-size:22px !important}@media (min-width: 768px){.h2{font-size:24px !important}}.h3{font-size:18px !important}@media (min-width: 768px){.h3{font-size:20px !important}}.h4{font-size:16px !important}.h5{font-size:14px !important}.h6{font-size:12px !important}.h1,.h2,.h3,.h4,.h5,.h6{font-weight:600 !important}.f1{font-size:26px !important}@media (min-width: 768px){.f1{font-size:32px !important}}.f2{font-size:22px !important}@media (min-width: 768px){.f2{font-size:24px !important}}.f3{font-size:18px !important}@media (min-width: 768px){.f3{font-size:20px !important}}.f4{font-size:16px !important}@media (min-width: 768px){.f4{font-size:16px !important}}.f5{font-size:14px !important}.f6{font-size:12px !important}.f00-light{font-size:40px !important;font-weight:300 !important}@media (min-width: 768px){.f00-light{font-size:48px !important}}.f0-light{font-size:32px !important;font-weight:300 !important}@media (min-width: 768px){.f0-light{font-size:40px !important}}.f1-light{font-size:26px !important;font-weight:300 !important}@media (min-width: 768px){.f1-light{font-size:32px !important}}.f2-light{font-size:22px !important;font-weight:300 !important}@media (min-width: 768px){.f2-light{font-size:24px !important}}.f3-light{font-size:18px !important;font-weight:300 !important}@media (min-width: 768px){.f3-light{font-size:20px !important}}.text-small{font-size:12px !important}.lead{margin-bottom:30px;font-size:20px;font-weight:300;color:#555}.lh-condensed-ultra{line-height:1 !important}.lh-condensed{line-height:1.25 !important}.lh-default{line-height:1.5 !important}.text-right{text-align:right !important}.text-left{text-align:left !important}.text-center{text-align:center !important}@media (min-width: 544px){.text-sm-right{text-align:right !important}.text-sm-left{text-align:left !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-right{text-align:right !important}.text-md-left{text-align:left !important}.text-md-center{text-align:center !important}}@media (min-width: 1012px){.text-lg-right{text-align:right !important}.text-lg-left{text-align:left !important}.text-lg-center{text-align:center !important}}@media (min-width: 1280px){.text-xl-right{text-align:right !important}.text-xl-left{text-align:left !important}.text-xl-center{text-align:center !important}}.text-normal{font-weight:normal !important}.text-bold{font-weight:600 !important}.text-italic{font-style:italic !important}.text-uppercase{text-transform:uppercase !important}.no-underline{text-decoration:none !important}.no-wrap{white-space:nowrap !important}.ws-normal{white-space:normal !important}.wb-break-all{word-break:break-all !important}.text-emphasized{font-weight:600;color:#24292e}.list-style-none{list-style:none !important}.text-shadow-dark{text-shadow:0 1px 1px rgba(0,0,0,0.25),0 1px 25px rgba(0,0,0,0.75)}.text-shadow-light{text-shadow:0 1px 0 rgba(255,255,255,0.5)}.v-hidden{visibility:hidden !important}.v-visible{visibility:visible !important}.d-table{display:table !important}.d-table-cell{display:table-cell !important}.table-fixed{table-layout:fixed !important}.d-block{display:block !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-flex{display:-webkit-box !important;display:-webkit-flex !important;display:flex !important}.d-inline-flex{display:-webkit-inline-box !important;display:-webkit-inline-flex !important;display:inline-flex !important}.d-none{display:none !important}@media (min-width: 544px){.d-sm-table{display:table !important}.d-sm-table-cell{display:table-cell !important}.d-sm-block{display:block !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-flex{display:-webkit-box !important;display:-webkit-flex !important;display:flex !important}.d-sm-inline-flex{display:-webkit-inline-box !important;display:-webkit-inline-flex !important;display:inline-flex !important}.d-sm-none{display:none !important}}@media (min-width: 768px){.d-md-table{display:table !important}.d-md-table-cell{display:table-cell !important}.d-md-block{display:block !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-flex{display:-webkit-box !important;display:-webkit-flex !important;display:flex !important}.d-md-inline-flex{display:-webkit-inline-box !important;display:-webkit-inline-flex !important;display:inline-flex !important}.d-md-none{display:none !important}}@media (min-width: 1012px){.d-lg-table{display:table !important}.d-lg-table-cell{display:table-cell !important}.d-lg-block{display:block !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-flex{display:-webkit-box !important;display:-webkit-flex !important;display:flex !important}.d-lg-inline-flex{display:-webkit-inline-box !important;display:-webkit-inline-flex !important;display:inline-flex !important}.d-lg-none{display:none !important}}@media (min-width: 1280px){.d-xl-table{display:table !important}.d-xl-table-cell{display:table-cell !important}.d-xl-block{display:block !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-flex{display:-webkit-box !important;display:-webkit-flex !important;display:flex !important}.d-xl-inline-flex{display:-webkit-inline-box !important;display:-webkit-inline-flex !important;display:inline-flex !important}.d-xl-none{display:none !important}}@media (max-width: 544px){.hide-sm{display:none !important}}@media (min-width: 544px) and (max-width: 768px){.hide-md{display:none !important}}@media (min-width: 768px) and (max-width: 1012px){.hide-lg{display:none !important}}@media (min-width: 1012px){.hide-xl{display:none !important}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);word-wrap:normal;border:0}fieldset{padding:0;margin:0;border:0}label{font-weight:600}.form-control,.form-select{min-height:34px;padding:6px 8px;font-size:14px;line-height:20px;color:#24292e;vertical-align:middle;background-color:#fff;background-repeat:no-repeat;background-position:right 8px center;border:1px solid #d1d5da;border-radius:3px;outline:none;box-shadow:inset 0 1px 2px rgba(27,31,35,0.075)}.form-control.focus,.form-control:focus,.form-select.focus,.form-select:focus{border-color:#2188ff;outline:none;box-shadow:inset 0 1px 2px rgba(27,31,35,0.075),0 0 0 0.2em rgba(3,102,214,0.3)}.input-contrast{background-color:#fafbfc}.input-contrast:focus{background-color:#fff}::-webkit-input-placeholder{color:#6a737d}::-moz-placeholder{color:#6a737d}:-ms-input-placeholder{color:#6a737d}::placeholder{color:#6a737d}.input-sm{min-height:28px;padding-top:3px;padding-bottom:3px;font-size:12px;line-height:20px}.input-lg{padding:4px 10px;font-size:16px}.input-block{display:block;width:100%}.input-monospace{font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace}.input-hide-webkit-autofill::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none !important;pointer-events:none;visibility:hidden}.form-checkbox{padding-left:20px;margin:15px 0;vertical-align:middle}.form-checkbox label em.highlight{position:relative;left:-4px;padding:2px 4px;font-style:normal;background:#fffbdd;border-radius:3px}.form-checkbox input[type=checkbox],.form-checkbox input[type=radio]{float:left;margin:5px 0 0 -20px;vertical-align:middle}.form-checkbox .note{display:block;margin:0;font-size:12px;font-weight:normal;color:#586069}.form-checkbox-details{display:none}.form-checkbox-details-trigger:checked ~ * .form-checkbox-details,.form-checkbox-details-trigger:checked ~ .form-checkbox-details{display:block}.hfields{margin:15px 0}.hfields::before{display:table;content:""}.hfields::after{display:table;clear:both;content:""}.hfields .form-group{float:left;margin:0 30px 0 0}.hfields .form-group dt label{display:inline-block;margin:5px 0 0;color:#586069}.hfields .form-group dt img{position:relative;top:-2px}.hfields .btn{float:left;margin:28px 25px 0 -20px}.hfields .form-select{margin-top:5px}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none;appearance:none}.form-actions::before{display:table;content:""}.form-actions::after{display:table;clear:both;content:""}.form-actions .btn{float:right}.form-actions .btn+.btn{margin-right:5px}.form-warning{padding:8px 10px;margin:10px 0;font-size:14px;color:#735c0f;background:#fffbdd;border:1px solid #d9d0a5;border-radius:3px}.form-warning p{margin:0;line-height:1.5}.form-warning a{font-weight:600}.form-select{display:inline-block;max-width:100%;height:34px;padding-right:24px;padding-right:8px \9;background:#fff url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAMAAACzvE1FAAAADFBMVEUzMzMzMzMzMzMzMzMKAG/3AAAAA3RSTlMAf4C/aSLHAAAAPElEQVR42q3NMQ4AIAgEQTn//2cLdRKppSGzBYwzVXvznNWs8C58CiussPJj8h6NwgorrKRdTvuV9v16Afn0AYFOB7aYAAAAAElFTkSuQmCC") no-repeat right 8px center;background-image:none \9;background-size:8px 10px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select::-ms-expand{opacity:0}.form-select[multiple]{height:auto}.select-sm{height:28px;min-height:28px;padding-top:3px;padding-bottom:3px;font-size:12px}.select-sm[multiple]{height:auto;min-height:0}.form-group{margin:15px 0}.form-group .form-control{width:440px;max-width:100%;margin-right:5px;background-color:#fafbfc}.form-group .form-control:focus{background-color:#fff}.form-group .form-control.shorter{width:130px}.form-group .form-control.short{width:250px}.form-group .form-control.long{width:100%}.form-group textarea.form-control{width:100%;height:200px;min-height:200px}.form-group textarea.form-control.short{height:50px;min-height:50px}.form-group dt{margin:0 0 6px}.form-group label{position:relative}.form-group.flattened dt{float:left;margin:0;line-height:32px}.form-group.flattened dd{line-height:32px}.form-group dd h4{margin:4px 0 0}.form-group dd h4.is-error{color:#cb2431}.form-group dd h4.is-success{color:#28a745}.form-group dd h4+.note{margin-top:0}.form-group.required dt label::after{padding-left:5px;color:#cb2431;content:"*"}.form-group .success,.form-group .error,.form-group .indicator{display:none;font-size:12px;font-weight:600}.form-group.loading{opacity:0.5}.form-group.loading .indicator{display:inline}.form-group.loading .spinner{display:inline-block;vertical-align:middle}.form-group.successful .success{display:inline;color:#28a745}.form-group.warn .warning,.form-group.warn .error,.form-group.errored .warning,.form-group.errored .error{position:absolute;z-index:10;display:block;max-width:450px;padding:5px 8px;margin:4px 0 0;font-size:13px;font-weight:normal;border-style:solid;border-width:1px;border-radius:3px}.form-group.warn .warning::after,.form-group.warn .warning::before,.form-group.warn .error::after,.form-group.warn .error::before,.form-group.errored .warning::after,.form-group.errored .warning::before,.form-group.errored .error::after,.form-group.errored .error::before{position:absolute;bottom:100%;left:10px;z-index:15;width:0;height:0;pointer-events:none;content:" ";border:solid transparent}.form-group.warn .warning::after,.form-group.warn .error::after,.form-group.errored .warning::after,.form-group.errored .error::after{border-width:5px}.form-group.warn .warning::before,.form-group.warn .error::before,.form-group.errored .warning::before,.form-group.errored .error::before{margin-left:-1px;border-width:6px}.form-group.warn .warning{color:#735c0f;background-color:#fffbdd;border-color:#d9d0a5}.form-group.warn .warning::after{border-bottom-color:#fffbdd}.form-group.warn .warning::before{border-bottom-color:#d9d0a5}.form-group.errored label{color:#cb2431}.form-group.errored .error{color:#86181d;background-color:#ffdce0;border-color:#cea0a5}.form-group.errored .error::after{border-bottom-color:#ffdce0}.form-group.errored .error::before{border-bottom-color:#cea0a5}.note{min-height:17px;margin:4px 0 2px;font-size:12px;color:#586069}.note .spinner{margin-right:3px;vertical-align:middle}.css-truncate.css-truncate-target,.css-truncate .css-truncate-target{display:inline-block;max-width:125px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:top}.css-truncate.expandable.zeroclipboard-is-hover .css-truncate-target,.css-truncate.expandable.zeroclipboard-is-hover.css-truncate-target,.css-truncate.expandable:hover .css-truncate-target,.css-truncate.expandable:hover.css-truncate-target{max-width:10000px !important}.TableObject{display:table}.TableObject-item{display:table-cell;width:1%;white-space:nowrap;vertical-align:middle}.TableObject-item--primary{width:99%}.labels{position:relative}.label,.Label{display:inline-block;padding:3px 4px;font-size:12px;font-weight:600;line-height:1;color:#fff;border-radius:2px;box-shadow:inset 0 -1px 0 rgba(27,31,35,0.12)}.label:hover,.Label:hover{text-decoration:none}.Label--gray{color:#586069;background-color:#eaecef}.Label--outline{margin-top:-1px;margin-bottom:-1px;font-weight:normal;color:#586069;background-color:transparent;border:1px solid rgba(27,31,35,0.15);box-shadow:none}.Label--outline-green{color:#28a745;border:1px solid #34d058}.Label--gray-darker{background-color:#6a737d}.Label--orange{background-color:#d15704}.state,.State{display:inline-block;padding:4px 8px;font-weight:600;line-height:20px;color:#fff;text-align:center;background-color:#6a737d;border-radius:3px}.State--green{background-color:#2cbe4e}.State--purple{background-color:#6f42c1}.State--red{background-color:#cb2431}.State--small{padding:0.125em 4px;font-size:12px}.State--small .octicon{width:1em}.Counter{display:inline-block;padding:2px 5px;font-size:12px;font-weight:600;line-height:1;color:#586069;background-color:rgba(27,31,35,0.08);border-radius:20px}.Counter--gray-light{color:#24292e;background-color:rgba(27,31,35,0.15)}.Counter--gray{color:#fff;background-color:#6a737d}.avatar{display:inline-block;overflow:hidden;line-height:1;vertical-align:middle;border-radius:3px}.avatar-small{border-radius:2px}.avatar-link{float:left;line-height:1}.avatar-group-item{display:inline-block;margin-bottom:3px}.avatar-parent-child{position:relative}.avatar-child{position:absolute;right:-15%;bottom:-9%;background-color:#fff;border-radius:2px;box-shadow:-2px -2px 0 rgba(255,255,255,0.8)}.markdown-body{font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body::before{display:table;content:""}.markdown-body::after{display:table;clear:both;content:""}.markdown-body>*:first-child{margin-top:0 !important}.markdown-body>*:last-child{margin-bottom:0 !important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#cb2431}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body p,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body dl,.markdown-body table,.markdown-body pre{margin-top:0;margin-bottom:16px}.markdown-body hr{height:0.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:0.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 tt,.markdown-body h1 code,.markdown-body h2 tt,.markdown-body h2 code,.markdown-body h3 tt,.markdown-body h3 code,.markdown-body h4 tt,.markdown-body h4 code,.markdown-body h5 tt,.markdown-body h5 code,.markdown-body h6 tt,.markdown-body h6 code{font-size:inherit}.markdown-body h1{padding-bottom:0.3em;font-size:2em;border-bottom:1px solid #eaecef}.markdown-body h2{padding-bottom:0.3em;font-size:1.5em;border-bottom:1px solid #eaecef}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:0.875em}.markdown-body h6{font-size:0.85em;color:#6a737d}.markdown-body ul,.markdown-body ol{padding-left:2em}.markdown-body ul.no-list,.markdown-body ol.no-list{padding:0;list-style-type:none}.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ol,.markdown-body ol ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:0.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table th,.markdown-body table td{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body table img{background-color:transparent}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #dfe2e5}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#24292e}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:0;padding-top:0.2em;padding-bottom:0.2em;margin:0;font-size:85%;background-color:rgba(27,31,35,0.05);border-radius:3px}.markdown-body code::before,.markdown-body code::after,.markdown-body tt::before,.markdown-body tt::after{letter-spacing:-0.2em;content:"\00a0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code::before,.markdown-body pre code::after,.markdown-body pre tt::before,.markdown-body pre tt::after{content:normal}.markdown-body .csv-data td,.markdown-body .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.markdown-body .csv-data .blob-num{padding:10px 8px 9px;text-align:right;background:#fff;border:0}.markdown-body .csv-data tr{border-top:0}.markdown-body .csv-data th{font-weight:600;background:#f6f8fa;border-top:0}/*!
  6. * GitHub Light v0.3.0
  7. * Copyright (c) 2012 - 2016 GitHub, Inc.
  8. * Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE)
  9. */.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-smi,.pl-s .pl-s1{color:#333}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-s,.pl-pds,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sre,.pl-sr .pl-sra{color:#183691}.pl-v,.pl-smw{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2{color:#f8f8f8;background-color:#b52a1d}.pl-c2::before{content:"^M"}.pl-sr .pl-cce{font-weight:bold;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:bold;color:#1d3e81}.pl-mq{color:#008080}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:bold;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:#808080}.pl-mdr{font-weight:bold;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:#c0c0c0}.pl-corl{text-decoration:underline;color:#183691}kbd{display:inline-block;padding:3px 5px;font:11px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fcfcfc;border:solid 1px #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5}.badmono{font-family:sans-serif;font-weight:600}.diffstat{font-size:12px;font-weight:600;color:#586069;white-space:nowrap;cursor:default}.block-diff-deleted,.block-diff-added,.block-diff-neutral{display:inline-block;width:8px;height:8px;margin-left:1px}.block-diff-deleted,.text-red .block-diff-neutral{background-color:#cb2431}.block-diff-added,.block-diff-neutral{background-color:#2cbe4e}.block-diff-neutral{background-color:#d1d5da}.tab-size[data-tab-size="1"]{-moz-tab-size:1;-o-tab-size:1;tab-size:1}.tab-size[data-tab-size="2"]{-moz-tab-size:2;-o-tab-size:2;tab-size:2}.tab-size[data-tab-size="3"]{-moz-tab-size:3;-o-tab-size:3;tab-size:3}.tab-size[data-tab-size="4"]{-moz-tab-size:4;-o-tab-size:4;tab-size:4}.tab-size[data-tab-size="5"]{-moz-tab-size:5;-o-tab-size:5;tab-size:5}.tab-size[data-tab-size="6"]{-moz-tab-size:6;-o-tab-size:6;tab-size:6}.tab-size[data-tab-size="7"]{-moz-tab-size:7;-o-tab-size:7;tab-size:7}.tab-size[data-tab-size="8"]{-moz-tab-size:8;-o-tab-size:8;tab-size:8}.tab-size[data-tab-size="9"]{-moz-tab-size:9;-o-tab-size:9;tab-size:9}.tab-size[data-tab-size="10"]{-moz-tab-size:10;-o-tab-size:10;tab-size:10}.tab-size[data-tab-size="11"]{-moz-tab-size:11;-o-tab-size:11;tab-size:11}.tab-size[data-tab-size="12"]{-moz-tab-size:12;-o-tab-size:12;tab-size:12}.task-list-item{list-style-type:none}.task-list-item label{font-weight:normal}.task-list-item.enabled label{cursor:pointer}.task-list-item+.task-list-item{margin-top:3px}.task-list-item .handle{display:none}.task-list-item-checkbox{margin:0 0.2em 0.25em -1.6em;vertical-align:middle}.reorderable-task-lists .markdown-body .contains-task-list{padding:0}.reorderable-task-lists .markdown-body li:not(.task-list-item){margin-left:26px}.reorderable-task-lists .markdown-body ol:not(.contains-task-list) li,.reorderable-task-lists .markdown-body ul:not(.contains-task-list) li{margin-left:0}.reorderable-task-lists .markdown-body li p{margin-top:0}.reorderable-task-lists .markdown-body .task-list-item{padding-right:15px;padding-left:42px;margin-right:-15px;margin-left:-15px;border:1px solid transparent}.reorderable-task-lists .markdown-body .task-list-item+.task-list-item{margin-top:0}.reorderable-task-lists .markdown-body .task-list-item .contains-task-list{padding-top:4px}.reorderable-task-lists .markdown-body .task-list-item .handle{display:block;float:left;width:20px;padding:2px 0 0 2px;margin-left:-43px;opacity:0}.reorderable-task-lists .markdown-body .task-list-item .drag-handle{fill:#333}.reorderable-task-lists .markdown-body .task-list-item.hovered{background:#fafafa;border-top-color:#ededed;border-bottom-color:#ededed}.reorderable-task-lists .markdown-body .task-list-item.hovered>.handle{opacity:1}.reorderable-task-lists .markdown-body .task-list-item.is-dragging{opacity:0}.reorderable-task-lists .markdown-body .task-list-item.is-ghost{border-right-color:#ededed;border-left-color:#ededed}.review-comment-contents .markdown-body .task-list-item{padding-left:42px;margin-right:-12px;margin-left:-12px;border-top-left-radius:3px;border-bottom-left-radius:3px}.review-comment-contents .markdown-body .task-list-item.hovered{border-left-color:#ededed}#user-content-toc{overflow:visible}#user-content-toc tr{border-top:0}#user-content-toc td{padding:0 20px;background-color:#f7f7f7;border:0;border-radius:3px}#user-content-toc ul{padding-left:0;font-weight:600;list-style:none}#user-content-toc ul li{padding-left:0.2em}#user-content-toc ul ul{font-weight:normal}#user-content-toc ul ul li::before{float:left;margin-top:-0.2em;margin-right:0.2em;font-size:1.2em;line-height:1;color:#aaa;content:"\231e"}#user-content-toc ul ul ul{padding-left:0.9em}#user-content-toctitle h2{margin-top:1em;margin-bottom:0.5em;font-size:1.25em;border-bottom:0}*{box-sizing:border-box}html{font-size:14px;-webkit-text-size-adjust:100%;text-size-adjust:100%}body{width:100%;padding:0;margin:0;font:1rem/1.42 -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";color:#333;background-color:#fafbfc}button,input,textarea{margin:0;font-family:inherit;font-size:inherit}button{padding:0;margin:0;background:none;border:0}table{border-spacing:0;border-collapse:collapse}a{color:#0366d6;text-decoration:none}a:active{color:inherit}strong{font-weight:600}pre{word-wrap:break-word;white-space:pre-wrap}code,pre{font-family:Consolas, "Liberation Mono", Courier, monospace}hr{background:#eee;border-color:transparent}input[type="checkbox"][disabled]{opacity:0.25}textarea[disabled]::-webkit-input-placeholder{color:#000}.color-icons .octicon-comment-discussion{color:#333}.color-icons .octicon-issue-closed{color:#cb2431}.color-icons .octicon-issue-opened{color:#28a745}.color-icons .octicon-git-branch{color:#28a745}.color-icons .octicon-git-pull-request{color:#28a745}.color-icons .octicon-git-commit{color:#586069}.color-icons .opened{color:#28a745}.color-icons .closed{color:#cb2431}.color-icons .merged{color:#6f42c1}footer{padding:12px 0;font-size:14px;border-top:1px solid #ddd}footer .octicon{float:left;color:#aaa}footer ul{float:right;padding-left:0;margin-top:0;margin-bottom:0}footer li{float:left;line-height:32px;color:#aaa;list-style-type:none}footer li+li{margin-left:15px}footer li a{color:inherit}footer form{display:inline}footer .switch-to-desktop{display:inline;color:inherit}.clearfix::before,.clearfix::after{display:table;line-height:0;content:""}.clearfix::after{clear:both}.protip{margin:20px 0;font-size:13px;color:#666;text-align:center}.labels{position:relative;display:block}.label{font-size:10px}.switcher{position:relative;padding:15px 15px 15px 35px}.switcher.open .switcher-icon-open{display:none}.switcher.open .switcher-icon-close,.switcher.open .switcher-options{display:block}.switcher-toggle{display:block;font-weight:600;color:inherit}.switcher-toggle-meta{display:block;font-size:85%;font-weight:normal;color:#586069}.switcher-options{position:relative;display:none;padding-top:6px}.switcher-option{display:block;padding:6px 0;font-weight:600}.switcher-option .octicon-check{position:absolute;left:-19px}.switcher-option .css-truncate-target{max-width:80%}.switcher-icon{float:left;margin-top:1px;margin-left:-20px;color:#586069}.switcher-icon-open,.switcher-icon-close{position:relative;top:1px;float:right;width:auto;margin-right:0;margin-left:0;color:#586069}.switcher-icon-close{display:none}.octicon.switcher-icon-close{display:none}.octicon.switcher-icon-open{display:block}.bubble{padding:0;margin:0 15px 15px;overflow:hidden;word-break:break-word;word-wrap:break-word;white-space:normal;background:#fff;border:1px solid #ddd;border-radius:3px}.nav-bar+.bubble,.tabs+.bubble{margin-top:15px}.bubble.padded{padding:10px}.bubble.no-padding .bubble-content{padding:0}.bubble.no-margin{margin:0}.bubble.bubble-warn{color:#4c4a42;background-color:#fff9ea;border-color:#dfd8c2}.bubble-title{display:block;padding:10px 15px;margin:0;font-size:14px;color:#444;border-bottom:1px solid #ddd}.bubble-title .octicon{width:16px;margin-right:2px;margin-left:-3px;color:#586069;text-align:center}.bubble-title time{float:right;font-size:12px;font-weight:normal;line-height:20px;color:#586069}.bubble-content{padding:15px}.bubble-content .markdown-body{padding:0}.bubble-actions{display:table;width:100%;text-align:center;table-layout:fixed}.bubble-content+.bubble-actions,.repo-list+.bubble-actions{border-top:1px solid #ddd}.bubble-action-form{display:table-cell}.bubble-action{display:table-cell;padding:10px 15px;font-weight:500;line-height:1.5;color:#0366d6}.bubble-action+.bubble-action,.bubble-action+.bubble-action-form,.bubble-action-form+.bubble-action,.bubble-action-form+.bubble-action-form{border-left:1px solid #ddd}.bubble-disabled{background:#f5f5f5;border-color:#ccc;box-shadow:inset 0 0 10px rgba(0,0,0,0.1)}.bubble-disabled .bubble-title{color:#586069}.bubble-disabled .bubble-content{font-size:15px;color:#586069;text-align:center}.bubble-disabled .bubble-content.full-bleed{padding:15px}.bubble-disabled .bubble-action{color:#586069}ol ol,ul ol{list-style-type:lower-roman}ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:lower-alpha}.list{padding:0;margin:0;list-style:none;background-color:#fff}.list:first-child .list-heading:first-child{border-top:0}.list .list-item-template{display:none}.list.list-rendered:empty{display:none}.list.list-rendered .list-item-template{display:block}.list-item{position:relative;display:block;width:100%;padding:14px 15px 14px 35px;line-height:inherit;text-align:left}.list-item+.list-item,.list-item+.list-heading,.list-heading+.list-item{border-top:1px solid #eee}.list-item.with-avatar{padding-left:45px}.list-item.no-padding{padding-left:15px}.list-item>.octicon{position:absolute;top:14px;left:12px;width:16px;text-align:center;vertical-align:bottom}.list-item>.list-item-chevron{top:50%;right:15px;left:auto;margin-top:-10px;font-size:20px;color:#586069}.list-item .avatar{position:absolute;top:14px;left:15px;border-radius:2px}.list-item .meta{float:right;margin-bottom:5px;margin-left:5px;font-size:11px;color:#6a737d}.list-item .meta ~ .list-item-title{margin-right:55px}.list-item .meta .octicon-star{vertical-align:top}.list-item .nwo-link{display:block;margin-bottom:2px;font-size:12px;font-weight:600;color:#586069}.list-item .ref{color:#586069}.list-item .byline{display:block;margin:0;font-size:12px;color:#586069}.list-item .byline strong{font-weight:normal;color:#444}.list-item .labels{margin-top:2px}.list-item.read{background-color:#fafbfc}.list-item.read .list-item-title{color:#586069}.list-item.read>.octicon{color:#586069}.list-item.read .list-action-archive{display:none}.list-item .filename{max-width:100%}.list-item mark{font-weight:600;color:inherit;background-color:inherit}.list-item-title{display:block;margin-bottom:3px;font-weight:600;line-height:1.2;color:#0366d6;word-wrap:break-word}.list-heading{position:relative;padding:7px 15px;clear:both;font-size:12px;font-weight:600;color:#586069;background-color:#f5f5f5;border-top:1px solid #eee}.list-heading::before{display:table;content:""}.list-heading::after{display:table;clear:both;content:""}.list-heading a,.list-heading .btn-link{color:inherit}.list-heading .btn-link>.octicon{opacity:0.65}.list-heading .path-item{float:left}.list-action-form{float:right;margin-top:-10px;margin-right:-15px}.list-action-form>.btn-link{padding:10px 15px;color:#ccc}.list-action-form ~ .list-item-title{margin-right:30px}.list-empty .list-item{padding:45px;font-weight:600;color:#586069;text-align:center}.list-options .list-item .list-item-title{color:#586069}.list-options .list-item>.octicon{color:#fff}.list-options .selected .list-item-title{color:#333}.list-options .selected>.octicon{color:#444}.repo-list-item .repo-name{max-width:80%;margin-right:32px}.repo-list .private{background-color:#fffdef}.repo-list .author-avatar{border-radius:2px}.repo-list .octicon{color:#586069}.repo-list .octicon-lock{color:rgba(27,31,35,0.7)}.repo-list .no-repo{padding:15px;color:#586069;text-align:center}.files-list{word-wrap:break-word}.files-list+.files-list{border-top:1px solid #ddd}.files-list .meta{float:none;margin:5px 0 0}.files-list .warning{font-weight:600;background-color:#fffccc}.files-list .simplified-path{color:#888}.files-list .octicon{top:16px}.files-list .octicon-file-directory{color:#80a6cd}.user-list .follow-list-info{font-size:12px;color:#666}.bubble.auth-form-container{margin-top:30px;margin-bottom:30px}.bubble.auth-form-container label{display:block;margin:0 0 5px}.bubble.auth-form-container .bubble-title{color:#fff;background-color:#586873}.bubble.auth-form-container p{margin:0}.bubble.auth-form-container .form-control{display:block;width:100%;margin:0 0 15px}.auth-form-message{padding:10px}.login-heading{margin-bottom:5px;font-size:13px}.login-heading+p{margin-top:0}.login-note{position:relative;padding:0 15px;font-size:13px}.login-note p{padding-left:22.5px;color:#586069}.login-note.no-icon p{padding-left:0}.login-note .octicon{position:absolute;top:0;left:15px;color:#586069}.login-note .btn{margin-bottom:15px}.u2f-auth-form-body{display:block;padding:10px 20px 20px}.u2f-auth-form-body.unavailable{display:none}section.blog{padding:0 15px}section.blog .pagination{margin-top:20px}section.blog .pagination .next_page{float:right}.post-title{padding:15px 15px 0;margin:0 -15px 5px;margin-bottom:20px;font-size:24px;font-style:normal;font-weight:normal;color:#495961;background-color:rgba(0,0,0,0.01)}.byline{margin-bottom:15px;font-size:13px;color:#586069}.byline span,.byline span img,.byline a{vertical-align:top;border-radius:3px}.byline a{color:#586069}.byline .author{margin-left:12px}.post-content h3{border-bottom:1px solid #eee}.post-content ol{list-style-type:decimal}.post-content ul{list-style-type:disc}.post-content img{width:100%;box-sizing:border-box;padding:3px;border:1px solid #d8d8d8}.post-content img.emoji{width:inherit;border:0}.post-content .anchor{display:none}.post-content .user-mention{color:#333}.post-content code{white-space:normal}.post-content iframe{max-width:100%;height:inherit}.posts h3,.recent-posts h3{padding:0;margin:15px 0 5px;font-size:14px;font-style:normal;font-weight:normal;color:#586069}.posts ul,.recent-posts ul{padding-left:0}.posts li,.recent-posts li{margin-bottom:10px;line-height:1.2;list-style-type:none}.posts li a,.recent-posts li a{font-size:20px;font-style:normal;font-weight:normal}.recent-posts{padding:15px;margin:15px 0 0;background-color:#fff;border-top:1px solid #eee}.recent-posts h3{margin-top:0}.recent-posts p{margin-bottom:0}.recent-posts li a{font-size:16px}.btn{display:inline-block;padding:9px 15px;margin:0;font-size:13px;font-weight:600;line-height:1.5;color:#333;text-align:center;text-shadow:0 1px 0 rgba(255,255,255,0.9);white-space:nowrap;vertical-align:middle;background-image:-webkit-linear-gradient(#fafafa, #eaeaea);background-image:linear-gradient(#fafafa, #eaeaea);border:1px solid #ddd;border-bottom-color:#cecece;border-radius:3px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn:active{background-color:#6a737d;background-image:none;border-color:#444;box-shadow:0 1px 3px rgba(0,0,0,0.075),inset 0 0 5px rgba(0,0,0,0.2)}.btn:disabled,.btn.disabled{pointer-events:none;opacity:0.3}.btn .count{position:relative;margin:0 0 0 3px;font-size:11px;font-weight:100;color:rgba(0,0,0,0.4);text-shadow:none;border-radius:10px}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-image:-webkit-linear-gradient(#8add6d, #60b044);background-image:linear-gradient(#8add6d, #60b044);border-color:#5ca941}.btn-danger{color:#900}.btn-block{display:block;width:100%;text-align:center}.btn-block+.btn-block{margin-top:10px}.section-title button{float:right;padding:0;margin:0;font-size:12px;color:#586069;background:transparent;border:0;box-shadow:none}.section-title button .octicon{color:#586069}.btn-link{display:inline;padding:0;font-size:inherit;color:#0366d6;white-space:nowrap;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.mobile.commit{display:block;float:none;width:100%;padding:15px;color:#213f4d;background-color:#e6f1f6;border-bottom:1px solid #d1e2eb}.mobile.commit .commit-desc pre{padding:0;margin:0;font-size:12px}.commit-title{margin:0 0 5px;font-size:13px;font-weight:600}.commit-list .message{color:#333}.commit-authorship{padding:7.5px 0;font-size:12px;line-height:24px;color:#586069;background-color:#fff}.commit-authorship .avatar{float:left;margin-right:8px;margin-left:15px;border-radius:3px}.commit-authorship a{font-weight:600}.diff-view .file{position:relative;margin-bottom:15px;border-top:1px solid #d1d5da;border-bottom:1px solid #d1d5da}.diff-view .file:last-child:not(:only-child){border-bottom:0}.diff-view .file .meta{padding:5px 10px 3px;font-size:12px;color:#555;text-align:left;text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(#fff, #f5f5f5);background-image:linear-gradient(#fff, #f5f5f5);border-bottom:1px solid #d8d8d8}.diff-view .file .meta .info{position:relative;padding:6px 0;padding-left:30px;font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;line-height:1.2}.diff-view .file .meta .file-label{padding-left:0;margin-left:0;word-break:break-all;border-left:0 none;box-shadow:inset 0 0 0 transparent}.diff-view .file .meta span.icon{display:inline-block;padding:3px;margin:5px 5px 0 0;line-height:0;background:#f7f7f7;border:1px solid #ccc;border-right-color:#e5e5e5;border-bottom-color:#e5e5e5;border-radius:3px}.diff-view .file .meta .octicon-file-text{color:#aaa}.diff-view .file .file-label a{color:inherit}.diff-view .file .highlight{overflow:auto;overflow-x:auto;overflow-y:hidden}.diff-view .file .empty{padding:5px 10px;font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px;line-height:24px;color:#555}.diff-view .file .file-code{border-spacing:0;border-collapse:separate;background-color:#fff}.diff-view .file .file-diff-line{position:relative;cursor:pointer}.diff-view .file .blob-num{padding:0 3px;font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.3);text-align:right;vertical-align:top}.diff-view .file .blob-num::before{content:attr(data-line-number)}.diff-view .file .blob-code{padding-right:10px;padding-left:10px}.diff-view .file .blob-code-inner{font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px;color:#333;white-space:pre}.diff-view .file .blob-code-inner .x-first{border-top-left-radius:0.2em;border-bottom-left-radius:0.2em}.diff-view .file .blob-code-inner .x-last{border-top-right-radius:0.2em;border-bottom-right-radius:0.2em}.diff-view .file.soft-wrap .blob-code-inner{word-wrap:break-word;white-space:pre-wrap}.diff-view .file .prose .blob-code-inner{white-space:pre-wrap}.diff-view .file .blob-code-hunk{color:#586069;background-color:#f8f8ff}.diff-view .file .blob-num-hunk{background-color:#f3f3ff;border-color:#e4e4ff}.diff-view .file .blob-code-addition{background-color:#eaffea}.diff-view .file .blob-code-addition .x{background-color:#a6f3a6}.diff-view .file .blob-num-addition{background-color:#dbffdb;border-color:#c1e9c1}.diff-view .file .blob-code-deletion{background-color:#ffecec}.diff-view .file .blob-code-deletion .x{background-color:#f8cbcb}.diff-view .file .blob-num-deletion{background-color:#ffdddd;border-color:#f1c0c0}.diff-view .file span.no-nl-marker{position:relative;top:1px;margin-left:4px;color:#cb2431;vertical-align:middle}.diff-view .inline-comments{background-color:#fafbfc}.diff-view table .discussion-block{border-right:1px solid #ddd}.diff-view .inline-comment-form-container{width:100vw;border-right:1px solid #ddd}.add-inline-comment{cursor:pointer}.inline-comment-form{background-color:#fafbfc}.inline-comment-form .inline-note-reply{background-color:transparent;border-top:0}.inline-comment-form-container{padding:15px}.inline-comment-form-container .discussion-reply{padding:0}.comment-holder+.inline-comment-form-container{padding-top:0}.inline-comment-form-container .inline-comment-form,.inline-comment-form-container.open .inline-comment-form-actions{display:none}.inline-comment-form-container .inline-comment-form-actions,.inline-comment-form-container.open .inline-comment-form{display:block}.line-comments{padding:0;border:solid #ddd;border-width:1px 0}.inline-comments .discussion-block{max-width:100vw}.inline-comments .bubble-content{padding-top:10px;padding-bottom:10px}.inline-comments .markdown-body{font-size:85%}.inline-comments:last-child .line-comments{border-bottom:0}.timeline-inline-comments{width:100%;overflow:hidden}.timeline-inline-comments .inline-comment-form-container:last-child{border-bottom:1px solid #ddd}.timeline-review-comment-thread .diff-view .file{margin-bottom:0}.timeline-review-comment-thread .file-code{width:100%}.inline-note-sign-in-container{padding:15px;font-size:85%;text-align:center}.inline-note-sign-in-container .btn{margin-bottom:15px}.inline-comment-form-template-container{display:none}.diffstat{position:absolute;top:4px;left:0}.highlighted-blob{white-space:pre-wrap}.mobile-toc{background-color:#fff}.mobile-toc.open .switcher-options{display:block}.mobile-toc .diffstat{position:static}.mobile-toc .switcher-option{font-size:85%;font-weight:normal}.mobile-toc .switcher-option .octicon{float:left;margin-left:-20px;color:#ccc}.mobile-toc .switcher-option .octicon-diff-removed{color:#cb2431}.mobile-toc .switcher-option .octicon-diff-renamed{color:#677a85}.mobile-toc .switcher-option .octicon-diff-modified{color:#d0b44c}.mobile-toc .switcher-option .octicon-diff-added{color:#28a745}.add-comment-label,.review-cancel-button,.is-review-pending .start-review-label{display:none}.start-review-label,.is-review-pending .review-cancel-button,.is-review-pending .submit-review-button,.is-review-pending .add-comment-label{display:inline-block}.is-review-pending .submit-review-button{width:auto}.discussion-header{padding:15px 15px 0;background:#fff}.discussion-header .state{font-size:12px;line-height:16px;border-radius:2px}.discussion-header .discussion-block-title{padding:10px 0 15px}.discussion-header .pull-request-description-toggle .pull-request-description{display:block}.discussion-header .pull-request-description-toggle .pull-request-description-full{display:none}.discussion-header .pull-request-description-toggle.open .pull-request-description{display:none}.discussion-header .pull-request-description-toggle.open .pull-request-description-full{display:block}.discussion-header .branches{padding:7.5px 0;margin:0;font-size:12px;color:#aaa;cursor:pointer}.discussion-header .branches .branch-name{position:relative;display:inline-block;padding-left:20px;font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;color:#586069}.discussion-header .branches .branch-name .octicon{position:absolute;top:0;left:0}.discussion-header .branches .octicon-git-branch{width:16px;text-align:left}.discussion-header .branches .octicon-arrow-up{display:block;width:100%;margin-left:20px}.discussion-header .branches .css-truncate-target{max-width:90%}.discussion-title{margin-bottom:0;font-size:16px;word-wrap:break-word}.discussion-labels{padding:15px 15px 0;background-color:#fff}.discussion-labels .octicon{position:relative;top:2px;margin-right:2px;color:#586069}.discussion-starting-comment{position:relative}.discussion-starting-comment+.discussion-reply-container{margin-top:-1px}.discussion-starting-comment .avatar{position:absolute;left:15px;margin-right:10px;border-radius:2px}.discussion-starting-comment time{margin:0 15px;color:#586069}.discussion-starting-comment .username,.discussion-starting-comment .num{color:#666}.discussion-starting-comment .discussion-title .num{font-weight:100;color:#aaa}.discussion-starting-comment .discussion-block-title{padding-left:60px}.discussion-comment{padding:15px;background:#fff;border-bottom:1px solid #ddd}.commit-comments-header{padding:0 15px;font-size:14px}.commit-comments-header-sha{font-weight:normal}.discussion-block-title{position:relative;padding:10px 15px;font-size:12px;line-height:16px;color:#586069;background-color:#fff;border-bottom:1px solid #eee}.discussion-block-title::before{display:table;content:""}.discussion-block-title::after{display:table;clear:both;content:""}.discussion-block-title .avatar{float:left;margin-right:10px;border-radius:3px}.discussion-block-title .timestamp{color:#586069}.discussion-block-title .username{font-weight:600;color:#444}.discussion-block-meta{margin-left:42px}.discussion-block-meta .editor{color:#444}.commit{float:left;margin:0 10px 0 0}.bubble.is-pending{border-color:#d9d0a5}.bubble.is-pending .discussion-block-title{background-color:#fffbdd;border-color:#d9d0a5}.bubble .commit-message{padding:0;margin:0;color:#444;white-space:pre-wrap}.discussion-block{padding:15px}.discussion-block>.bubble{margin:0}.discussion-block-header{padding:25px 15px 7.5px;font-size:12px;font-weight:600;color:#586069;background-color:#f5f5f5;border-top:1px solid #ddd}.discussion-event{position:relative;padding:15px}.discussion-event .branch{font-weight:600;color:#444;white-space:nowrap;vertical-align:middle}.discussion-event .branch.css-truncate-target{max-width:165px}.discussion-event .timestamp{color:inherit}.timeline-truncation-container{padding-right:0;padding-left:0}.timeline-truncation-container+.discussion-block{padding-top:15px;border-top:1px solid #eee}.timeline-truncation-container .switch-to-desktop{color:#0366d6}.timeline-truncation-title{margin-top:0;margin-bottom:5px;font-weight:600;color:#586069}.issue-event{position:relative;padding-left:40px;font-size:13px;color:#586069}.issue-event:last-of-type{border-bottom:0}.issue-event .avatar{position:absolute;top:0;left:15px}.issue-event strong{color:#444}.issue-event .meta{margin:0.5em 0 0;font-size:12px;color:#586069}.issue-event .label{font-size:90%}.issue-event-icon{position:absolute;top:16px;left:15px;width:16px;color:#999;text-align:center}.issue-event-icon-open{color:#28a745}.issue-event-icon-closed{color:#cb2431}.issue-event-icon-merged{color:#6f42c1}.issue-event-icon-locked{color:#333}.issue-event-icon-unlocked{color:#28a745}.closed-event{padding-bottom:15px;border-bottom:5px solid #ddd}.dead-pull-request-review-comment{position:relative;display:block;padding-left:20px;margin:0 15px 15px;font-size:12px;color:#586069}.dead-pull-request-review-comment .octicon{position:absolute;top:0;left:0}.dead-pull-request-review-comment .username{font-weight:600;color:#586069}.timeline-review-comment-thread-container.dead .octicon{color:#aaa}.timeline-review-comment-thread-container.dead.open .octicon-unfold,.timeline-review-comment-thread-container.dead.open .show-diff{display:none}.timeline-review-comment-thread-container.dead:not(.open) .octicon-fold,.timeline-review-comment-thread-container.dead:not(.open) .hide-diff,.timeline-review-comment-thread-container.dead:not(.open) .timeline-review-comment-thread{display:none}.cross-reference .bubble-title{font-size:12px;color:#737b7c;background-image:-webkit-linear-gradient(#f8fbfc, #eef1f4);background-image:linear-gradient(#f8fbfc, #eef1f4);border-bottom:1px solid #e0e2e5}.cross-reference .bubble-title a{color:#737b7c}.cross-reference .bubble-title.private{padding-left:30px;background-color:#fffdef;background-image:none}.cross-reference .bubble-title .octicon-lock{float:left;margin-left:-20px;color:rgba(27,31,35,0.7)}.cross-reference .bubble-content a{color:#444}.timeline-commits-container{padding:15px;font-size:12px;line-height:16px;color:#666}.timeline-commits-container .octicon-repo-push{position:absolute;top:1px;left:1px;margin-right:10px;color:#aaa}.timeline-commits-container .author{font-weight:600;color:#666}.timeline-commits-container .timestamp{color:#666}.timeline-commits-container .timeline-commits{width:100%;margin-top:7.5px}.timeline-commits-container .timeline-commits td{padding:4px 0}.timeline-commits-container .commit-message a{color:#666;word-break:break-word}.commit-meta{width:36px;text-align:right}.commit-meta a{color:#aaa}.commit-meta .octicon{position:inline-block}.commit-meta .octicon-x{color:#cb2431}.commit-meta .octicon-check{margin-left:3px;color:#28a745}.commits-header{position:relative;padding-left:25px}.commit-avatar-container{width:25px}.commit-avatar-container .avatar{border-radius:2px}.timeline-review-container .file-header{padding:3px 10px 5px;background-color:#f7f7f7;border-top:1px solid #d1d5da;border-radius:0}.timeline-review-container .file-header:first-child{border-top:0;border-radius:3px 3px 0 0}.timeline-review-container .file-info{font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px}.timeline-review-container .bubble{margin-top:15px}.timeline-review-container .inline-comment-form{background-color:#fff}.timeline-review-container .inline-comment-form-container{padding:10px 15px}.timeline-review-container.is-pending{border-color:#d9d0a5}.timeline-review-container.is-pending .label,.timeline-review-container.is-pending .file-header{color:#735c0f;background-color:#fffbdd}.timeline-review-container.is-pending .bubble{border-color:#d9d0a5}.timeline-review-container .file-code{width:auto;min-width:100%;white-space:nowrap;table-layout:fixed}.timeline-review-header{display:table;font-size:12px;color:#666}.timeline-review-icon{display:table-cell;width:24px;vertical-align:top}.timeline-review-icon .octicon{margin-top:-1px;color:#6a737d}.timeline-review-icon .octicon-eye{margin-top:0}.timeline-review-icon .octicon-x{margin-top:0;margin-left:2px}.timeline-review-icon .octicon-check{margin-left:2px}.timeline-review-avatar{display:table-cell;padding-right:5px}.timeline-review-meta{display:table-cell;vertical-align:top}.timeline-review-meta .author{color:#666}.discussion-item-review-comment{border-bottom:1px solid #eaecef}.discussion-item-review-comment:last-child{border-bottom:0}.outdated-comment .timeline-review-comment-thread,.outdated-comment .hide-outdated-button{display:none}.outdated-comment .file-header{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.outdated-comment.open .timeline-review-comment-thread,.outdated-comment.open .hide-outdated-button{display:block}.outdated-comment.open .show-outdated-button{display:none}.outdated-comment.open .file-header{border-bottom-right-radius:0;border-bottom-left-radius:0}.outdated-comment-label{line-height:22px}.user-mention,.team-mention{font-weight:600;color:#24292e}.discussion-create{margin:15px 15px 0}.discussion-create .form-control{margin-bottom:8px}.discussion-create .btn{margin-top:7.5px;margin-bottom:15px}.discussion-block+.discussion-block,.discussion-block+.discussion-event,.discussion-block+.timeline-commits-container,.discussion-event+.discussion-event,.discussion-event+.discussion-block,.discussion-event+.timeline-commits-container,.timeline-commits-container+.discussion-event,.timeline-commits-container+.discussion-block,.timeline-commits-container+.timeline-commits-container{border-top:1px solid #eee}.discussion-reply{padding:15px;text-align:right;background-color:#fff;border-top:1px solid #ddd}.discussion-reply .btn{margin-top:8px}.discussion-reply .btn+.btn{margin-left:8px}.comment-sign-in-container{padding:15px;font-size:13px;text-align:center}.comment-sign-in-container .btn{margin:0 0 15px}.thread-subscription-status{padding:15px;background-color:#fff;border-top:1px solid #ddd}.thread-subscription-status .octicon-radio-tower{float:left;color:#ccc}.thread-subscription-description{position:relative;min-height:30px;padding-left:42px;margin-top:0;font-size:13px;color:#586069}.thread-subscription-description .octicon{position:absolute;left:0}.line-comment-info{position:relative;padding:7.5px 15px;font-size:12px;color:#586069;border-bottom:1px solid #ddd}.line-comment-info::before,.line-comment-info::after{position:absolute;width:0;height:0;content:""}.line-comment-info::before{bottom:-8px;left:15px;z-index:10;border-top:8px solid #ddd;border-right:8px solid transparent;border-left:8px solid transparent}.line-comment-info::after{bottom:-7px;left:16px;z-index:20;border-top:7px solid #fff;border-right:7px solid transparent;border-left:7px solid transparent}.mobile-featured-carousel{margin:10px 0;overflow:auto;-webkit-overflow-scrolling:touch}.mobile-featured-carousel .mobile-featured-collections{padding:0;margin:0 15px;white-space:nowrap;list-style-type:none}.mobile-featured-carousel .mobile-featured-collection{display:inline-block;width:100%;padding:0;margin:0 5px 0 0}.mobile-featured-carousel .mobile-featured-collection:last-child{margin-right:15px}.mobile-featured-carousel .mobile-featured-collection-head{display:table;width:100%;height:150px;border-radius:3px}.mobile-featured-carousel .mobile-featured-collection-title{display:table-cell;padding:10px;font-size:18px;font-weight:500;color:#fff;text-align:center;white-space:pre-line;vertical-align:middle}.showcase-collection .header{padding:20px 15px;background:#555 url("/images/modules/home/octicons-bg.png") center repeat}.showcase-collection .header .avatar{width:20px;height:20px;vertical-align:middle;border-radius:2px}.showcase-collection .title{margin:0;font-size:18px;font-weight:500;color:#fff}.showcase-collection .description{margin:15px;font-size:15px}.showcase-collection .showcase-items .title-meta-info{margin-left:5px;font-size:12px;font-weight:normal;color:#586069}.showcase-collection .showcase-items .bubble-title{font-weight:600;line-height:30px;color:#4183c4}.showcase-collection .showcase-items .avatar{width:30px;height:30px;margin-right:5px;vertical-align:middle;border-radius:2px}.flash{position:relative;padding:15px;font-size:14px;font-weight:600;color:#264c72;background-color:#dbeaf9;border-bottom:solid 1px #bac6d3}.flash+.flash{margin-top:5px}.flash .container{margin-right:0;margin-left:0}.flash .octicon-x{display:none}.flash .flash-action{float:right;margin-top:-5px}.flash.flash-warn{color:#4c4a42;background-color:#fff9ea;border-color:#dfd8c2}.flash.flash-error{color:#911;background-color:#fcdede;border-color:#d2b2b2}.flash-messages.container{margin:0 0 15px}.touchable{-webkit-tap-highlight-color:transparent}.nav-bar{position:relative;overflow:visible;color:rgba(255,255,255,0.75);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#1e2327}.nav-bar-inner{height:50px;margin:0 2px;line-height:50px;text-align:center}.nav-bar-inner .header-button{position:absolute;padding:5px 8px;line-height:1;color:inherit;background:transparent;border:0;border-radius:5px}.nav-bar-inner .header-button:active,.nav-bar-inner .header-button:focus{outline:0;box-shadow:none}.nav-bar-inner .header-context-button{top:8px;right:8px}.nav-bar-inner .header-nav-button{top:8px;left:8px}.nav-bar-inner .octicon-lock{top:-1px;margin-right:5px}.nav-bar-inner .brand-logo-invertocat .octicon,.nav-bar-inner .brand-logo-wordmark .octicon{margin-top:-8px;color:#fff;vertical-align:text-top}.nav-bar-inner.has-notifications{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.nav-bar-inner.has-notifications .header-button{position:static;max-width:44px;padding:0 12px}.nav-bar-inner.has-notifications .header-context-button{padding-top:14px}.nav-bar-inner.has-notifications .header-notification-button{position:relative;padding-top:14px}.unread-notifications-indicator{position:absolute;top:7px;right:5px;display:block;width:14px;height:14px;background-color:#2188ff;border:2px solid #1e2327;border-radius:50%}.nav-bar-title-text{position:relative;max-width:75%;padding:0 5px;margin:0 auto;overflow:hidden;font-size:14px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.has-notifications .nav-bar-title-text{position:static;max-width:none;margin:0;-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1}.nav-bar-meta{padding:7.5px 15px;font-size:75%;text-align:center;border-top:1px solid #ddd}.nav-bar-tabs{position:absolute;z-index:9000;display:none;width:100%;height:0;padding:7.5px 0;overflow:hidden;font-size:16px;background-color:#1e2327;background-clip:padding-box}.nav-bar-tabs ul{padding:0;margin:0;list-style:none}.nav-bar-tabs a{position:relative;display:block;padding:8px 15px 8px 45px;color:rgba(255,255,255,0.75)}.nav-bar-tabs a .avatar,.nav-bar-tabs a .octicon{float:left;margin-top:3px;margin-left:-30px}.nav-bar-tabs a .octicon{width:20px;text-align:center}.nav-bar-tabs .section-title{padding:15px 0 0 15px;margin-top:7.5px;margin-bottom:0;font-size:12px;text-transform:uppercase}.nav-bar-tabs .unread-notifications-indicator{position:static;display:inline-block;vertical-align:-2px}.nav-is-open .nav-bar-tabs{display:block;height:auto}.markdown-body{font-size:15px}.markdown-body blockquote{margin-right:0;margin-left:0}.markdown-body code{white-space:normal}.markdown-body.email-format{line-height:1.5em !important}.markdown-body.email-format div{white-space:pre-wrap}.markdown-body .email-hidden-reply{display:none;white-space:pre-wrap}.markdown-body .email-hidden-reply.expanded{display:block}.markdown-body .email-quoted-reply,.markdown-body .email-signature-reply{padding:0 15px;margin-bottom:15px;color:#586069;border-left:4px solid #ddd}.breadcrumb{padding:15px;font-size:12px;color:#586069;border-bottom:1px solid #ddd}.breadcrumb .separator{margin:0 0.25em}.breadcrumb .octicon{margin-top:-1px;margin-right:5px}.breadcrumb a{font-weight:600}.breadcrumb strong{color:#444}.tabs{display:table;width:100%;table-layout:fixed}.tabs>a{display:table-cell;padding:10px 0;font-size:14px;font-weight:600;text-align:center;border-bottom:1px solid #ddd}.tabs>a.selected{color:#444;background-color:#fff;border-right:1px solid #ddd;border-bottom-color:#fff;border-left:1px solid #ddd}.tabs>a:first-child{border-left:0}.tabs>a:last-child{border-right:0}.pagination{position:relative;z-index:2;display:table;padding:0;margin-top:0;margin-bottom:-1px;background-color:#fafbfc}.pagination a,.pagination span,.pagination em{display:table-cell;width:1%;padding:10px 15px;color:#555;text-align:center;border:1px solid #ddd;border-left-color:#fff}.pagination a:first-child,.pagination span:first-child,.pagination em:first-child{border-left:0}.pagination a:last-child,.pagination span:last-child,.pagination em:last-child{border-right:0}.pagination span>a{padding:0}.pagination .current{font-style:normal;font-weight:600;color:#fff;background-color:#6a737d;background-image:-webkit-linear-gradient(#6a737d, #999);background-image:linear-gradient(#6a737d, #999);border-color:#6a737d}.pagination .gap,.pagination .disabled{color:#ccc}.oauth-header{padding:15px 15px 0;margin:0 0 15px;background:#fff;border-bottom:1px solid #ddd}.oauth-header::before{display:table;content:""}.oauth-header::after{display:table;clear:both;content:""}.oauth-header h1{margin-bottom:0;font-size:18px}.oauth-header .lead{margin-top:0;font-size:14px;color:#586069}.oauth-connection-illustration{position:relative;float:right;width:auto;margin-top:12px;margin-left:10px}.oauth-connection-illustration .oauth-image{float:left;padding:2px;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.1);border-radius:3px}.oauth-connection-illustration .oauth-image img{display:block;width:48px;height:48px;border-radius:3px}.oauth-connection-illustration .oauth-image.oauth-image-user{margin-top:20px;margin-left:-20px}.oauth-main .oauth-permissions-icon{float:left;margin-top:4px;margin-left:0;color:#586069;text-align:center}.oauth-main .permission-title{display:block;margin-bottom:2px;color:#000}.oauth-main .permission-summary,.oauth-main .permission-note{margin-left:34px}.oauth-main .permission-summary{line-height:1}.oauth-main .permission-summary .access-details{position:relative;color:#586069}.oauth-main .permission-note{margin-bottom:0;font-size:12px;color:#586069}.oauth-main .permission-note ul{padding-left:18px;margin:1em 0;list-style-type:disc}.oauth-main em.highlight{position:relative;padding:2px 3px;margin-right:-2px;margin-left:-3px;font-style:normal;color:#4c4a42;background:#fff9ea;border-radius:3px}.oauth-requests-summary{display:table;width:100%;table-layout:fixed}.oauth-requests-summary .octicon,.oauth-requests-summary .access-details{margin:0}.oauth-requests-summary .access-details{padding:0 10px 0 40px}.oauth-requests-summary .access-details p:first-child{margin-top:0}.oauth-requests-summary .access-details p:last-child{margin-bottom:0}.oauth-requests-summary .access-details .secondary-details{font-size:12px;color:#586069}.oauth-requests-summary .octicon-organization.approved{color:#28a745}.added-permission{color:#28a745}.oauth-permission-title{margin:15px 15px 5px}.oauth-secondary{font-size:12px}.oauth-secondary .no-description{margin-top:0;color:#586069}.oauth-secondary .learn-more,.oauth-secondary .existing-access{padding-top:15px;margin-bottom:5px;border-top:1px solid #eee}.oauth-secondary .features-list{padding:0;margin:0;list-style:none}.oauth-secondary .features-list li{margin-top:10px}.oauth-secondary .features-list li:first-child{margin-top:0}.oauth-secondary .features-list .list-divider{margin:15px -15px;border-top:1px solid #eee}.oauth-secondary .features-list .octicon{margin-right:5px;color:#60b044}.oauth-permissions-details .content{display:none}.oauth-permissions-details.open .content{display:block}.oauth-permissions-details.default .default-access{display:inline}.oauth-permissions-details.full .full-access{display:inline}.oauth-user-permissions .full-access,.oauth-user-permissions .limited-access,.oauth-user-permissions .limited-access-emails-followers,.oauth-user-permissions .limited-access-emails-profile,.oauth-user-permissions .limited-access-followers-profile,.oauth-user-permissions .limited-access-profile,.oauth-user-permissions .limited-access-followers,.oauth-user-permissions .limited-access-emails,.oauth-user-permissions .no-access{display:none}.oauth-user-permissions.limited.limited-email .limited-access-emails{display:inline}.oauth-user-permissions.limited.limited-email.limited-profile .limited-access-emails,.oauth-user-permissions.limited.limited-email.limited-profile .limited-access-profile{display:none}.oauth-user-permissions.limited.limited-email.limited-profile .limited-access-emails-profile{display:inline}.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-emails,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-profile,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-followers,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-emails-profile,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-emails-followers,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-followers-profile{display:none}.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access{display:inline}.oauth-user-permissions.limited.limited-email.limited-follow .limited-access-emails,.oauth-user-permissions.limited.limited-email.limited-follow .limited-access-followers{display:none}.oauth-user-permissions.limited.limited-email.limited-follow .limited-access-emails-followers{display:inline}.oauth-user-permissions.limited.limited-follow .limited-access-followers{display:inline}.oauth-user-permissions.limited.limited-follow.limited-profile .limited-access-followers,.oauth-user-permissions.limited.limited-follow.limited-profile .limited-access-profile{display:none}.oauth-user-permissions.limited.limited-follow.limited-profile .limited-access-followers-profile{display:inline}.oauth-user-permissions.limited.limited-profile .limited-access-profile{display:inline}.oauth-repo-permissions .default-access,.oauth-repo-permissions .public-access,.oauth-repo-permissions .full-access{display:none}.oauth-repo-permissions.public .public-access{display:inline}.oauth-delete-repo-permissions .octicon-alert{color:#cb2431}.oauth-repo-status-permissions .no-access,.oauth-repo-status-permissions .full-access{display:none}.oauth-notifications-permissions .no-access,.oauth-notifications-permissions .read-access,.oauth-notifications-permissions .via-public-access,.oauth-notifications-permissions .via-full-access{display:none}.oauth-notifications-permissions.read .read-access{display:inline}.oauth-notifications-permissions.via-public .via-public-access{display:inline}.oauth-notifications-permissions.via-public .octicon{display:none}.oauth-notifications-permissions.via-full .via-full-access{display:inline}.oauth-gist-permissions .no-access,.oauth-gist-permissions .full-access{display:none}.oauth-granular-permissions .no-access,.oauth-granular-permissions .read-access,.oauth-granular-permissions .write-access,.oauth-granular-permissions .full-access{display:none}.oauth-granular-permissions.none .no-access{display:inline}.oauth-granular-permissions.read .read-access{display:inline}.oauth-granular-permissions.write .write-access{display:inline}.oauth-granular-permissions.full .full-access{display:inline}.oauth-connect{padding-bottom:15px;margin:0 15px}.issues-reset-query-wrapper{padding:15px;background-color:#fff;border-bottom:solid 1px #eee}.subset-files-tab{background-color:#e6f1f6}.branch-action{padding:15px;font-size:12px;color:#586069;background-color:#fff;border-top:1px solid #eee}.discussion-block-header+.branch-action{border-top-color:#ddd}.branch-action-with-icon{padding-left:35px}.branch-action-heading{margin-top:0;margin-bottom:0;font-size:14px;color:#24292e}.branch-action-icon{float:left;width:16px;margin-left:-23px;text-align:center}.branch-action-expandable{border-top:1px solid #eee}.discussion-block-header+.branch-action-expandable{border-top-color:#ddd}.branch-action-expandable .list-item{padding-right:40px}.branch-action-expandable .list-items-overflow{max-height:170px;-webkit-overflow-scrolling:touch;overflow-y:auto;font-size:13px;background-color:#f5f5f5;border-top:1px solid #eee}.branch-action-expandable .list-items-overflow .list-item{padding-top:7px;padding-bottom:7px}.branch-action-expandable .list-items-overflow .list-item-state-icon{top:8px}.branch-action-expandable .octicon-fold,.branch-action-expandable .list-items-overflow{display:none}.branch-action-expandable.open .octicon-fold,.branch-action-expandable.open .list-items-overflow{display:block}.branch-action-expandable.open .octicon-unfold{display:none}.branch-action-expandable .list-item:first-child .list-item-chevron{top:14px;margin-top:2px;font-size:18px}.branch-actions-details{margin-right:-25px}.merge-branch{position:relative}.merge-branch .is-loading .octicon{display:none}.merge-branch .is-loading .mergeable-state-loading{display:inline-block;width:16px;height:16px;background-image:url("/images/spinners/octocat-spinner-16px.gif")}.merge-branch .mergeable-state-message{margin-top:0;margin-bottom:0;font-size:12px;color:#586069}.merge-branch .mergeable-state-message.required{display:block;color:#586069}.merge-branch .merge-branch-form,.merge-branch .mergeable-state-message{display:none}.merge-branch.open{border-top:3px solid #ddd}.merge-branch.open .octicon-git-pull-request,.merge-branch.open .merge-message{display:none}.merge-branch.open.mergeable-state-clean .merge-branch-form{display:block}.merge-branch.open.mergeable-state-unstable .mergeable-state-message.unstable{display:block}.merge-branch.open.mergeable-state-dirty .mergeable-state-message.dirty{display:block}.merge-branch.open.mergeable-state-blocked .mergeable-state-message.blocked{display:block}.merge-branch.mergeable-state-error .mergeable-state-message.error{display:block}.merge-commit-message{margin:7.5px 0}.merge-commit-title{font-weight:600}.merge-form-author{margin-bottom:15px;font-size:12px;line-height:20px;color:#586069}.merge-form-author .avatar{margin-right:5px}.merge-options{margin-right:0;margin-left:0;color:#24292e}.merge-options .list-item{padding-top:10px;padding-bottom:10px}.merge-options .byline{font-weight:normal}.merge-option-radio{position:absolute;top:12px;left:12px;margin-right:3px}.merge-branch-form .btn-merge{display:block}.merge-branch-form .btn-squash,.merge-branch-form .btn-rebase{display:none}.merge-branch-form.is-squashing .btn-merge,.merge-branch-form.is-squashing .btn-rebase{display:none}.merge-branch-form.is-squashing .btn-squash{display:block}.merge-branch-form.is-rebasing .merge-commit-title,.merge-branch-form.is-rebasing .merge-commit-message{display:none}.merge-branch-form.is-rebasing .btn-merge,.merge-branch-form.is-rebasing .btn-squash{display:none}.merge-branch-form.is-rebasing .btn-rebase{display:block}.repository-meta{margin:15px;font-size:13px;color:#666}.repository-meta-url{word-wrap:break-word}.branch-selector{position:relative;padding-left:19px;font-weight:600}.branch-selector .octicon.octicon-git-branch{position:absolute;top:1px;left:0}.branch-selector .octicon.octicon-chevron-up,.branch-selector .octicon.octicon-chevron-down{position:relative;top:1px;float:right;width:auto;margin-right:0;margin-left:0}.branch-selector .octicon.octicon-chevron-up{display:none}.branch-selector label{display:block;font-size:inherit}.branch-selector-toggle{display:none}.branch-selector-toggle:checked ~ label .octicon-chevron-up{display:block}.branch-selector-toggle:checked ~ label .octicon-chevron-down{display:none}.branch-selector-toggle:checked ~ .branch-selector-options{display:block}.branch-selector-options{position:relative;display:none;padding-top:6px;font-size:13px;font-weight:normal}.branch-selector-option{display:block;padding:6px 0;font-size:14px;font-weight:600}.branch-selector-option .octicon-check{position:absolute;left:-19px}.branch-selector-all-branches{display:block;padding:6px 0}.latest-commit .commit-author{position:relative;padding-top:8px;padding-bottom:8px;font-size:12px;line-height:20px;color:#586069;background:#fff}.latest-commit .bubble-content strong{color:#555}.pulse-control{padding:15px;font-size:11px;text-align:right}.trending-text-for{padding-right:5px}.trending-text-in{padding-right:5px;padding-left:5px}.pulse-summary{margin:0 0 30px}.pulse-summary:last-of-type{margin-bottom:0}.pulse-summary .summary-title{padding:0;margin:0 0 5px;font-size:14px}.pulse-summary .bar-graph{display:table;width:100%;margin:0;border-radius:3px}.pulse-summary .bar{display:table-cell;height:15px;background-color:#6a737d}.pulse-summary .bar.closed{background-color:#cb2431}.pulse-summary .bar.open{background-color:#28a745}.pulse-summary .bar.merged{background-color:#6f42c1}.pulse-summary .bar.proposed{background-color:#28a745}.pulse-summary .summary-box{display:table;width:100%;padding:0;margin:0;color:#586069;border:1px solid #f2f2f4}.pulse-summary .summary-box li{display:table-cell;width:50%;padding:15px 0;text-align:center}.pulse-summary .summary-box li:first-child{border-right:1px solid #f2f2f4}.pulse-summary .summary-box .count{display:block;font-size:16px;color:#444}.pulse-summary .summary-box .count .octicon{margin-top:2px}.user-bar-graph{position:relative;height:103px;background:#fff}.max-commits{position:absolute;top:3px;right:15px;font-size:10px;color:#586069}.user-bar-item{position:relative;float:left;width:20px;height:75px;margin:0 5px 5px 0}.user-bar-item img{position:absolute;bottom:-28px;margin-right:5px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.user-bar{position:absolute;bottom:0;width:20px;max-height:75px;padding:0 0 3px;margin:0;font-size:12px;color:#586069;background-color:#fc9a28;border-top-left-radius:3px;border-top-right-radius:3px;opacity:0.8}.y-axis-bar{position:absolute;left:0;width:100%;height:1px;background:#eaeaea}.y-axis-bar.top{top:0}.y-axis-bar.middle{top:36px}.y-axis-bar.bottom{bottom:27px;border-color:#ccc}.bar-graph{height:30px;padding:0;margin:15px 0}.bar-graph a{position:relative;display:block;float:left;height:10px;padding:0;margin:0}.bar-graph a .label{position:absolute;bottom:-23px;font-size:13px;color:#586069}.bar-graph a:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.bar-graph a:first-child .label{left:0}.bar-graph a:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.bar-graph a:last-child .label{right:0}.file-browser-header{max-width:100%;border-bottom:1px solid #ddd}.file-browser-header>.TableObject-item{padding:15px}.file-browser-header>.TableObject-item:first-child{white-space:normal;border-right:solid 1px #ddd}.file-browser-header .octicon{color:#586069}.history-link{margin-top:4px;font-size:12px;font-weight:600;color:#586069;vertical-align:top}p.history-link{padding:15px;margin:0;font-size:13px;border-bottom:1px solid #ddd}p.history-link a{color:#586069}.blob-breadcrumb{position:relative;padding-left:40px}.blob-breadcrumb .filetype-icon{position:absolute;top:15px;left:15px}.blob-history{position:relative;display:none;color:#7b878c;background:#f5f9fc;border-bottom:1px solid #d2d9dd}.blob-history a{display:block;padding:15px 15px 15px 41px;font-size:13px;color:#0366d6}.blob-history .octicon{color:#7b878c}.blob-history .octicon-history{position:absolute;top:16px;left:15px}.blob-history .commit-ref{float:right;margin:2px 0 0 10px;font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px;font-weight:600;color:#7b787c}.blob-history-label{float:right;color:#0366d6}.blob-history-checkbox{position:absolute;top:0;left:0;opacity:0}.blob-history-checkbox:checked ~ .blob-history{display:block}.blob-file-content{background-color:#fff}.blob-file-content pre{margin:0;overflow:scroll;word-wrap:normal;white-space:pre}.blob-file-content .code-body pre{padding:15px 0}.blob-file-content .code-body pre .line{padding:0 15px}.blob-file-content-blankslate{padding:15px;margin-top:0;margin-bottom:0}.markdown-body{padding:15px}.subscription-settings-bubble .bubble-content{padding:0 15px}.reponav-wrapper{position:relative;z-index:2;height:36px;margin-top:-1px;overflow-y:hidden;background-color:#1e2327}.reponav{padding-right:7px;padding-bottom:20px;padding-left:7px;margin-top:-6px;-webkit-overflow-scrolling:touch;overflow-x:auto;color:rgba(255,255,255,0.75);text-align:center;white-space:nowrap}.reponav-item{display:inline-block;padding:10px 8px;color:rgba(255,255,255,0.75)}.reponav-item .Counter{color:inherit;background-color:rgba(255,255,255,0.15)}.reponav-item.selected{font-weight:600;color:#fff}.server-stats{color:#586069;background:#333}.server-stats .stats{padding-left:0;margin:0}.server-stats .stats li{padding:15px;list-style:none;border-bottom:1px solid rgba(0,0,0,0.7);box-shadow:0 1px 0 rgba(255,255,255,0.1)}.server-stats a,.server-stats strong{font-weight:600;color:#fff}.server-stats .serverstats-branch{padding:15px;margin:0;font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace}.server-stats .serverstats-branch .current-branch{max-width:90%}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.profile-header{position:relative;min-height:140px;padding:15px 15px 10px 140px;overflow:visible;line-height:1.5}.profile-header .avatar{position:absolute;top:15px;left:15px;margin-right:15px;border-radius:3px}.profile-header h1{margin:0;font-size:16px;color:#333}.profile-header h3{margin:0;font-size:12px;font-weight:normal;color:#586069}.user-profile-bio{padding:0 15px 15px;white-space:pre-wrap}.user-profile-company>div{display:inline-block}.details{padding:0;margin:7.5px 0 0}.details li{margin-bottom:0;font-size:12px;line-height:1.8}.details-item{font-size:13px;line-height:24px;list-style:none}.details-item .css-truncate-target{max-width:88%}.details-item .octicon{width:16px;color:#586069;text-align:center}.user-following-container{display:block;padding:0 15px 15px}.user-following-container.loading{opacity:0.5}.user-following-container .follow,.user-following-container.on .unfollow{display:block}.user-following-container.on .follow,.user-following-container .unfollow{display:none}.language-color{position:relative;top:1px;display:inline-block;width:12px;height:12px;border-radius:50%}.profile-timeline-wrapper{position:relative;z-index:0;overflow:hidden;word-break:break-word;word-wrap:break-word;white-space:normal;background-color:#fff}.profile-timeline-wrapper .form-select{width:116px}.profile-timeline .timeline-item-icon{float:left;width:32px;height:32px;margin-top:-7px;margin-left:-40px;line-height:29px;color:#586069;text-align:center;background-color:#f6f8fa;border:2px solid #fff;border-radius:50%}.profile-timeline .profile-timeline-month-line{background-color:#fff}.profile-timeline .profile-timeline-month-line .profile-timeline-month-heading{top:-10px}.profile-timeline .profile-timeline-month-line::after{display:block;width:100%;height:1px;margin-top:-4px;content:"";background-color:#f6f8fa}.profile-timeline .profile-timeline-line::before{position:absolute;top:0;bottom:0;left:15px;z-index:-1;display:block;width:2px;content:"";background-color:#f6f8fa}.profile-timeline .profile-timeline-card-wrapper{border-top:solid 2px #fff;border-bottom:solid 2px #fff}.profile-timeline .profile-timeline-card-wrapper h4{margin:0}.profile-timeline .profile-timeline-card-footer{height:45px;line-height:45px}.profile-timeline .profile-timeline-card-footer .diffstat{position:inherit !important;top:0}.profile-timeline .progress-bar{height:10px;border-radius:2px}.profile-timeline .col-5{width:30%}.profile-rollup-wrapper .css-truncate-target{max-width:72%}.profile-rollup-icon .octicon{vertical-align:middle}.profile-rollup-event-title.css-truncate-target{max-width:100%}.profile-rollup-wrapper+.profile-rollup-wrapper{border-top:1px solid #f6f8fa}.profile-timeline-card-wrapper+.profile-timeline-card-wrapper{margin-top:8px}.profile-rollup-wrapper+.profile-timeline-card-wrapper{margin-top:0}.profile-timeline-month-line+.profile-timeline-card-wrapper{margin-top:8px}.profile-rollup-content{display:none}.profile-rollup-toggle .css-truncate-target{max-width:90%}.profile-rollup-toggle-closed{display:none}.profile-rollup-toggle-open{display:inline-block}.open .profile-rollup-content,.open .profile-rollup-toggle-closed{display:block}.open .btn-link .profile-rollup-toggle-closed{display:inline-block}.open .profile-rollup-toggle-open{display:none}.inbox-zero{padding:30px 15px;color:#586069;text-align:center;background-color:#fff;border-top:1px solid #eee}.inbox-unavailable{padding:30px 15px;color:#586069;text-align:center;background-color:#fff;border-top:1px solid #eee}.subscription-settings-bubble .form-checkbox{padding:0 15px 0 40px}.subscription-settings-bubble .form-checkbox input[type="radio"]{position:relative;top:2px}.subscription-settings-bubble .form-checkbox .note{padding-left:0}.mobile-search .list-item em,.mobile-search .list-item-title em,.mobile-search .list-item .byline em{padding:1px;padding-top:1px;font-style:normal;font-weight:600;text-shadow:none;background-color:rgba(255,255,140,0.5);border-radius:3px}.mobile-search .description{display:block;padding-bottom:5px;margin:0;font-size:12px;color:#000}.mobile-search .description strong{font-weight:normal;color:#444}.mobile-search .issue-list-item .octicon-comment-discussion{margin-left:5px;color:#586069}.mobile-search .user-list-item{min-height:73px}.mobile-search .user-list-item .user-list-info,.mobile-search .user-list-item .byline{padding-left:45px}.dashboard-search{display:block;margin:15px}.dashboard-search .dashboard-search-input{width:100%;margin:0}.topic-tag{display:inline-block;padding:0.3em 0.9em;margin:0.25em 0.5em 0.25em 0;background-color:#e7f3ff;border-radius:3px}.branch-groups{padding-top:15px;background:#fff}.branch-groups .bubble-title{background-color:#f5f5f5}.branches-list{border-bottom:1px solid #ddd}.branches-list:last-child{border-bottom:0}.branches-list .branch-name{display:inline-block;padding:2px 6px;margin-left:15px;font:12px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;color:rgba(0,0,0,0.5);background-color:rgba(209,227,237,0.5);border-radius:3px}.branches-list .branch-name .octicon{margin:1px -2px 0 0;color:#b0c4ce}.branches-list a.branch-name{color:#0366d6}.branch-list-item .branch-name{max-width:80%;margin-right:10px}.branch-list-item .meta{margin-top:3px}.branch-list-item .branch-meta{display:block;margin-top:3px;margin-left:0;font-size:12px;color:#586069}.gist-mobile-blob{border-top:1px solid #ddd}.gist-meta{margin-top:15px}.render-container{padding:30px;line-height:0;text-align:center;background:#dfe2e5}.render-container .render-viewer{display:none;width:100%;height:100%;border:0}.render-container .octospinner{display:none}.render-container .render-viewer-error,.render-container .render-viewer-fatal,.render-container .render-viewer-invalid{display:none}.render-container.is-render-automatic .octospinner{display:inline-block}.render-container.is-render-requested .octospinner{display:inline-block}.render-container.is-render-requested.is-render-failed .render-viewer-error{display:inline-block}.render-container.is-render-requested.is-render-failed .render-viewer,.render-container.is-render-requested.is-render-failed .render-viewer-fatal,.render-container.is-render-requested.is-render-failed .render-viewer-invalid,.render-container.is-render-requested.is-render-failed .octospinner{display:none}.render-container.is-render-requested.is-render-failed-fatal .render-viewer-fatal{display:inline-block}.render-container.is-render-requested.is-render-failed-fatal .render-viewer,.render-container.is-render-requested.is-render-failed-fatal .render-viewer-error,.render-container.is-render-requested.is-render-failed-fatal .render-viewer-invalid,.render-container.is-render-requested.is-render-failed-fatal .octospinner{display:none}.render-container.is-render-requested.is-render-failed-invalid .render-viewer-invalid{display:inline-block}.render-container.is-render-requested.is-render-failed-invalid .render-viewer,.render-container.is-render-requested.is-render-failed-invalid .render-viewer-error,.render-container.is-render-requested.is-render-failed-invalid .render-viewer-fatal,.render-container.is-render-requested.is-render-failed-invalid .octospinner{display:none}.render-container.is-render-ready.is-render-requested:not(.is-render-failed){height:500px;padding:0;background:none}.render-container.is-render-ready.is-render-requested:not(.is-render-failed) .render-viewer{display:block}.render-container.is-render-ready.is-render-requested:not(.is-render-failed) .render-viewer-error,.render-container.is-render-ready.is-render-requested:not(.is-render-failed) .render-viewer-fatal,.render-container.is-render-ready.is-render-requested:not(.is-render-failed) .octospinner{display:none}.render-notice{padding:20px 15px;font-size:14px;color:#4c4a42;background-color:#fff9ea;border-color:#dfd8c2}
  10. @media (min-width: 992px) {
  11. .container{
  12. width: 980px;
  13. margin-right: auto;
  14. margin-left: auto;
  15. position: relative;
  16. margin-top: 16px;
  17. margin-bottom: 16px;
  18. border: 1px solid #ddd;
  19. border-radius: 3px;
  20. }
  21. }
  22. </style>
  23. </head>
  24. <body><div id="readme" class="container"><article class="markdown-body entry-content"><p>&#xFEFF;</p>
  25. <h2 id="installation-d-un-pare-feu">Installation d&apos;un pare-feu</h2>
  26. <p>J&apos;ai utilis&#xE9; depuis toujours <strong>iptables</strong> &quot;brut&quot;. Ayant lu beaucoup de bien de <strong>ufw</strong>, je vais tenter une installation de ce dernier.</p>
  27. <p>Apr&#xE8;s usage, il s&apos;av&#xE8;re difficile de configurer <strong>fail2ban</strong> avec <strong>ufw</strong>.</p>
  28. <p>Je vais quand m&#xEA;me laisser la doc de configuration de <strong>ufw</strong>, tout en pr&#xE9;f&#xE9;rant utiliser <strong>iptables</strong>.</p>
  29. <h3 id="installation-de-iptables">Installation de iptables</h3>
  30. <p><strong>Iptables</strong> est install&#xE9; automatiquement. Nous allons rajouter le paquet <strong>iptables-persistent</strong> pour assurer le lancement automatique de nos r&#xE8;gles &#xE0; l&apos;allumage de la machine.</p>
  31. <pre><code class="language-shell">root@atom:/home/ericadmin# apt install iptables-persistent
  32. Lecture des listes de paquets... Fait
  33. Construction de l&apos;arbre des d&#xE9;pendances
  34. Lecture des informations d&apos;&#xE9;tat... Fait
  35. The following additional packages will be installed:
  36. netfilter-persistent
  37. Les NOUVEAUX paquets suivants seront install&#xE9;s :
  38. iptables-persistent netfilter-persistent
  39. 0 mis &#xE0; jour, 2 nouvellement install&#xE9;s, 0 &#xE0; enlever et 0 non mis &#xE0; jour.
  40. Il est n&#xE9;cessaire de prendre 19,5 ko dans les archives.
  41. Apr&#xE8;s cette op&#xE9;ration, 79,9 ko d&apos;espace disque suppl&#xE9;mentaires seront utilis&#xE9;s.
  42. Souhaitez-vous continuer ? [O/n] o
  43. R&#xE9;ception de:1 http://deb.debian.org/debian stretch/main amd64 netfilter-persistent all 1.0.4+nmu2 [8 792 B]
  44. R&#xE9;ception de:2 http://deb.debian.org/debian stretch/main amd64 iptables-persistent all 1.0.4+nmu2 [10,7 kB]
  45. 19,5 ko r&#xE9;ceptionn&#xE9;s en 0s (198 ko/s)
  46. Pr&#xE9;configuration des paquets...
  47. S&#xE9;lection du paquet netfilter-persistent pr&#xE9;c&#xE9;demment d&#xE9;s&#xE9;lectionn&#xE9;.
  48. (Lecture de la base de donn&#xE9;es... 36713 fichiers et r&#xE9;pertoires d&#xE9;j&#xE0; install&#xE9;s.)
  49. Pr&#xE9;paration du d&#xE9;paquetage de .../netfilter-persistent_1.0.4+nmu2_all.deb ...
  50. D&#xE9;paquetage de netfilter-persistent (1.0.4+nmu2) ...
  51. S&#xE9;lection du paquet iptables-persistent pr&#xE9;c&#xE9;demment d&#xE9;s&#xE9;lectionn&#xE9;.
  52. Pr&#xE9;paration du d&#xE9;paquetage de .../iptables-persistent_1.0.4+nmu2_all.deb ...
  53. D&#xE9;paquetage de iptables-persistent (1.0.4+nmu2) ...
  54. Param&#xE9;trage de netfilter-persistent (1.0.4+nmu2) ...
  55. Created symlink /etc/systemd/system/multi-user.target.wants/netfilter-persistent.service &#x2192; /lib/systemd/system/netfilter-persistent.service.
  56. update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
  57. Traitement des actions diff&#xE9;r&#xE9;es (&#xAB; triggers &#xBB;) pour systemd (232-25+deb9u1) ...
  58. Traitement des actions diff&#xE9;r&#xE9;es (&#xAB; triggers &#xBB;) pour man-db (2.7.6.1-2) ...
  59. Param&#xE9;trage de iptables-persistent (1.0.4+nmu2) ...
  60. root@atom:/home/ericadmin#</code></pre>
  61. <p>Nous obtenons donc 2 fichiers de configuration, /etc/iptables/rules.v4 et /etc/iptables/rules.v6.</p>
  62. <p>En listant ces fichiers, aucune r&#xE8;gle n&apos;est encore enregistr&#xE9;e: tout passe, en entr&#xE9;e et en sortie.</p>
  63. <p>Ces fichiers sont mis &#xE0; jour gr&#xE2;ce aux commandes suivantes.</p>
  64. <pre><code class="language-shell">iptables-save &gt; /etc/iptables/rules.v4
  65. ip6tables-save &gt; /etc/iptables/rules.v6</code></pre>
  66. <p>Les commandes disponibles pour <strong>netfilter-persistent</strong> sont les suivantes:</p>
  67. <ul>
  68. <li>systemctl start netfilter-persistent</li>
  69. <li>systemctl stop netfilter-persistent</li>
  70. <li>systemctl restart netfilter-persistent</li>
  71. <li>systemctl stop netfilter-persistent</li>
  72. <li>systemctl status netfilter-persistent</li>
  73. </ul>
  74. <p>Exemples d&apos;utilisation suivant l&apos;&#xE9;tat de <strong>netfilter-persistent</strong>:</p>
  75. <pre><code class="language-shell">root@atom:/home/ericadmin# systemctl stop netfilter-persistent
  76. root@atom:/home/ericadmin# systemctl status netfilter-persistent
  77. &#x25CF; (**point en rouge**) netfilter-persistent.service - netfilter persistent configuration
  78. Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
  79. Active: failed (Result: exit-code) since Sun 2018-02-11 13:50:22 CET; 13s ago
  80. Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
  81. Process: 1525 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
  82. Main PID: 1525 (code=exited, status=0/SUCCESS)
  83. f&#xE9;vr. 11 13:42:02 atom systemd[1]: Starting netfilter persistent configuration...
  84. f&#xE9;vr. 11 13:42:02 atom netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
  85. f&#xE9;vr. 11 13:42:02 atom netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
  86. f&#xE9;vr. 11 13:42:02 atom systemd[1]: Started netfilter persistent configuration.
  87. f&#xE9;vr. 11 13:50:22 atom systemd[1]: Stopping netfilter persistent configuration...
  88. f&#xE9;vr. 11 13:50:22 atom netfilter-persistent[1629]: Automatic flush disabled; use &apos;/usr/sbin/netfilter-persistent flush&apos;
  89. f&#xE9;vr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Control process exited, code=exited status=1
  90. f&#xE9;vr. 11 13:50:22 atom systemd[1]: Stopped netfilter persistent configuration.
  91. f&#xE9;vr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Unit entered failed state.
  92. f&#xE9;vr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Failed with result &apos;exit-code&apos;.
  93. root@atom:/home/ericadmin#
  94. root@atom:/home/ericadmin# systemctl start netfilter-persistent
  95. root@atom:/home/ericadmin# systemctl status netfilter-persistent
  96. &#x25CF; (**point en vert**) netfilter-persistent.service - netfilter persistent configuration
  97. Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
  98. Active: active (exited) since Sun 2018-02-11 13:51:09 CET; 2s ago
  99. Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
  100. Process: 1641 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
  101. Main PID: 1641 (code=exited, status=0/SUCCESS)
  102. f&#xE9;vr. 11 13:51:09 atom systemd[1]: Starting netfilter persistent configuration...
  103. f&#xE9;vr. 11 13:51:09 atom netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
  104. f&#xE9;vr. 11 13:51:09 atom netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
  105. f&#xE9;vr. 11 13:51:09 atom systemd[1]: Started netfilter persistent configuration.
  106. root@atom:/home/ericadmin#</code></pre>
  107. <p>Pour sauver des r&#xE8;gles &#x201C;entr&#xE9;es &#xE0; la main&#x201D;, tapez:</p>
  108. <pre><code class="language-shell">root@atom:/home/ericadmin# service netfilter-persistent save
  109. [....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
  110. run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
  111. done.
  112. root@atom:/home/ericadmin#</code></pre>
  113. <p>ou</p>
  114. <pre><code class="language-shell">root@atom:/home/ericadmin# iptables-save &gt; /etc/iptables/rules.v4
  115. root@atom:/home/ericadmin# ip6tables-save &gt; /etc/iptables/rules.v6</code></pre>
  116. <h3 id="configuration-des-r-gles-iptables">Configuration des r&#xE8;gles iptables</h3>
  117. <p>Nous allons les configurer avec un script donn&#xE9; par Nicolargo: <a href="https://blog.nicolargo.com/2013/06/ma-methode-pour-gerer-les-regles-iptables.html">Site de NicoLargo</a></p>
  118. <pre><code class="language-shell">#! /bin/sh
  119. ### BEGIN INIT INFO
  120. # Provides: PersonalFirewall
  121. # Required-Start: $remote_fs $syslog
  122. # Required-Stop: $remote_fs $syslog
  123. # Default-Start: 2 3 4 5
  124. # Default-Stop: 0 1 6
  125. # Short-Description: Personal Firewall
  126. # Description:
  127. ### END INIT INFO
  128. # programme iptables IPV4 et IPV6
  129. IPT=/sbin/iptables
  130. IP6T=/sbin/ip6tables
  131. # Les IPs
  132. IPMAISON=192.168.111.150
  133. IP6MAISON=fe80::1e6f:65ff:fe92:dd1f
  134. # fonction qui d&#xE9;marre le firewall
  135. do_start() {
  136. # Efface toutes les r&#xE8;gles en cours. -F toutes. -X utilisateurs
  137. $IPT -t filter -F
  138. $IPT -t filter -X
  139. $IPT -t nat -F
  140. $IPT -t nat -X
  141. $IPT -t mangle -F
  142. $IPT -t mangle -X
  143. #
  144. $IP6T -t filter -F
  145. $IP6T -t filter -X
  146. # Il n&apos;y a pas de NAT en IPV6
  147. #$IP6T -t nat -F
  148. #$IP6T -t nat -X
  149. $IP6T -t mangle -F
  150. $IP6T -t mangle -X
  151. # strat&#xE9;gie (-P) par d&#xE9;faut : bloc tout l&apos;entrant le forward et autorise le sortant
  152. $IPT -t filter -P INPUT DROP
  153. $IPT -t filter -P FORWARD DROP
  154. $IPT -t filter -P OUTPUT ACCEPT
  155. #
  156. $IP6T -F INPUT
  157. $IP6T -F FORWARD
  158. $IP6T -X
  159. # Loopback
  160. $IPT -t filter -A INPUT -i lo -j ACCEPT
  161. $IPT -t filter -A OUTPUT -o lo -j ACCEPT
  162. #
  163. $IP6T -t filter -A INPUT -i lo -j ACCEPT
  164. $IP6T -t filter -A OUTPUT -o lo -j ACCEPT
  165. # ICMP
  166. $IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
  167. $IPT -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
  168. # Permettre &#xE0; une connexion ouverte de recevoir du trafic en entr&#xE9;e
  169. $IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  170. #
  171. $IP6T -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  172. $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
  173. $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
  174. $IP6T -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
  175. $IP6T -A INPUT -j ACCEPT
  176. $IP6T -A INPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
  177. $IP6T -P INPUT DROP
  178. $IP6T -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
  179. $IP6T -A FORWARD -p icmpv6 --icmpv6-type echo-request -j ACCEPT
  180. $IP6T -A FORWARD -i br0 -j ACCEPT
  181. $IP6T -A FORWARD -i br1 -o sit_sixxs -j ACCEPT
  182. $IP6T -P FORWARD DROP
  183. # DNS:53
  184. # /!\ Il faut autoriser le DNS AVANT de d&#xE9;clarer des hosts sinon pas de r&#xE9;solution de nom possible
  185. $IPT -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
  186. $IPT -t filter -A INPUT -p udp --dport 53 -j ACCEPT
  187. # DNS:53
  188. $IP6T -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
  189. $IP6T -t filter -A INPUT -p udp --dport 53 -j ACCEPT
  190. # DNS:953
  191. # /!\ Il faut autoriser le DNS AVANT de d&#xE9;clarer des hosts sinon pas de r&#xE9;solution de nom possible
  192. $IPT -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
  193. $IPT -t filter -A INPUT -p udp --dport 953 -j ACCEPT
  194. #
  195. $IP6T -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
  196. $IP6T -t filter -A INPUT -p udp --dport 953 -j ACCEPT
  197. # accepte tout d&apos;une ip en TCP (de la maison)
  198. $IPT -t filter -A INPUT -p tcp -s $IPMAISON -j ACCEPT
  199. $IP6T -t filter -A INPUT -p tcp -s $IP6MAISON -j ACCEPT
  200. # ssh
  201. $IPT -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
  202. $IPT -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
  203. #
  204. $IP6T -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
  205. $IP6T -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
  206. #NTP out
  207. $IPT -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
  208. $IP6T -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
  209. # # HTTP + HTTPS Out
  210. # $IPT -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
  211. # $IPT -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
  212. # $IP6T -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
  213. # $IP6T -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
  214. # # HTTP + HTTPS In
  215. # $IPT -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
  216. # $IPT -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
  217. # $IP6T -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
  218. # $IP6T -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
  219. # # Mail SMTP:25
  220. # $IPT -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
  221. # $IPT -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
  222. # $IP6T -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
  223. # $IP6T -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
  224. # # Mail SMTP:587
  225. # $IPT -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
  226. # $IPT -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
  227. # $IP6T -t filter -A INPUT -p tcp --dport 597 -j ACCEPT
  228. # $IP6T -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
  229. # # Mail IMAP:143
  230. # $IPT -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
  231. # $IPT -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
  232. # $IP6T -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
  233. # $IP6T -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
  234. # # Mail IMAPS:993
  235. # $IPT -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
  236. # $IPT -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
  237. # $IP6T -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
  238. # $IP6T -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
  239. # # Mail 465
  240. # $IPT -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
  241. # $IPT -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
  242. # $IP6T -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
  243. # $IP6T -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
  244. #
  245. echo &quot;firewall started [OK]&quot;
  246. }
  247. # fonction qui arr&#xEA;te le firewall
  248. do_stop() {
  249. # Efface toutes les r&#xE8;gles
  250. $IPT -t filter -F
  251. $IPT -t filter -X
  252. $IPT -t nat -F
  253. $IPT -t nat -X
  254. $IPT -t mangle -F
  255. $IPT -t mangle -X
  256. #
  257. $IP6T -t filter -F
  258. $IP6T -t filter -X
  259. #$IP6T -t nat -F
  260. #$IP6T -t nat -X
  261. $IP6T -t mangle -F
  262. $IP6T -t mangle -X
  263. # remet la strat&#xE9;gie
  264. $IPT -t filter -P INPUT ACCEPT
  265. $IPT -t filter -P OUTPUT ACCEPT
  266. $IPT -t filter -P FORWARD ACCEPT
  267. #
  268. $IP6T -t filter -P INPUT ACCEPT
  269. $IP6T -t filter -P OUTPUT ACCEPT
  270. $IP6T -t filter -P FORWARD ACCEPT
  271. #
  272. echo &quot;firewall stopped [OK]&quot;
  273. }
  274. # fonction status firewall
  275. do_status() {
  276. # affiche les r&#xE8;gles en cours
  277. clear
  278. echo Status IPV4
  279. echo --
  280. $IPT -L -n -v
  281. echo
  282. echo --
  283. echo
  284. echo status IPV6
  285. echo --
  286. $IP6T -L -n -v
  287. echo
  288. }
  289. case &quot;$1&quot; in
  290. start)
  291. do_start
  292. # quitte sans erreur
  293. exit 0
  294. ;;
  295. stop)
  296. do_stop
  297. # quitte sans erreur
  298. exit 0
  299. ;;
  300. restart)
  301. do_stop
  302. do_start
  303. # quitte sans erreur
  304. exit 0
  305. ;;
  306. status)
  307. do_status
  308. # quitte sans erreurs
  309. exit 0
  310. ;;
  311. *)
  312. # Si on ne tape ni &quot;start&quot; ni &quot;stop&quot;... on affiche une erreur
  313. echo &quot;Usage: /etc/init.d/firewall {start|stop|restart|status}&quot;
  314. # quitte le script avec un etat &quot;en erreur&quot;
  315. exit 1
  316. ;;
  317. esac</code></pre>
  318. <p>Explications:</p>
  319. <pre><code class="language-shell">Cr&#xE9;ation de 4 cha&#xEE;nes pour faciliter les op&#xE9;rations:
  320. # iptables -N TCP
  321. # iptables -N UDP
  322. # ip6tables -N TCP
  323. # ip6tables -N UDP
  324. On est sur un serveur, pas un routeur, donc, on interdit la r&#xE8;gle FORWARD:
  325. # iptables -P FORWARD DROP
  326. # ip6tables -P FORWARD DROP
  327. On autorise tout en sortie:
  328. # iptables -P OUTPUT ACCEPT
  329. # ip6tables -P OUTPUT ACCEPT
  330. Nous allons accepter les connexions d&#xE9;j&#xE0; &#xE9;tablies:
  331. # iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  332. # ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  333. En entr&#xE9;e, on commence par interdire tout; on ouvrira les ports suivantles besoins:
  334. # iptables -P INPUT DROP
  335. # ip6tables -P INPUT DROP
  336. Aoristaion des connexions **loopback** (internes):
  337. # iptables -A INPUT -i lo -j ACCEPT
  338. # ip6tables -A INPUT -i lo -j ACCEPT
  339. Nous allons interdire les paquets marqu&#xE9;s **INVALID**; il faudra auparavant accepter les paquets **ICMPv6 Neighbor Discovery** qui apparaissent invalides:
  340. #iptables -A INPUT -p 41 -j ACCEPT
  341. #ip6tables -A INPUT -p 41 -j ACCEPT
  342. # iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
  343. # ip6tables -A INPUT -m conntrack --ctstate INVALID -j DROP
  344. Pour IPV6, il faut rajouter la r&#xE8;gle suivante qui permet de faire passer le protocol de d&#xE9;couverte des ordinateurs sur le m&#xEA;me r&#xE9;seau:
  345. # ip6tables -A INPUT -s fe80::/10 -p ipv6-icmp -j ACCEPT
  346. L&apos;adresse fe80:: est l&apos;adresse ipv6 valable uniquement sur le r&#xE9;seau local.
  347. On accepte les paquets **ping**:
  348. # iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
  349. # ip6tables -A INPUT -p icmpv6 -m conntrack --ctstate NEW -j ACCEPT
  350. On peut maintenant accepter les nouveaux paquets entrants. Les connexions entrantes doivent commencer avec un paquet **SYNC**. Elles seront rejet&#xE9;es si ce n&apos;est pas le cas:
  351. # iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
  352. # iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
  353. # ip6tables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
  354. # ip6tables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
  355. On rejette les paquets du protocole **icmp unreachable**
  356. # iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable
  357. # iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
  358. # ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
  359. # ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
  360. Pour IPV6, nous pouvons rajouter un filtrage pour le &quot;kernel reverse path filter&quot;:
  361. # ip6tables -t raw -A PREROUTING -m rpfilter -j ACCEPT
  362. # ip6tables -t raw -A PREROUTING -j DROP
  363. On accepte les paquets **ssh** sur le port 22 (changez ce port si vous avez configur&#xE9; vos ports diff&#xE9;remment)
  364. # iptables -A TCP -p tcp --dport 22 -j ACCEPT
  365. # ip6tables -A TCP -p tcp --dport 22 -j ACCEPT
  366. R&#xE8;gles pour le DNS et NTP (ports 53 et 41)
  367. # iptables -A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
  368. # iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
  369. # iptables -A INPUT -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
  370. # iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
  371. # iptables -A INPUT -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
  372. # iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT
  373. La m&#xEA;me chose pour IPV6:
  374. # ip6tables -A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
  375. # ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
  376. # ip6tables -A INPUT -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
  377. # ip6tables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
  378. # ip6tables -A INPUT -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
  379. # ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT
  380. Nous pouvons maintenant lister nos r&#xE8;gles. Nous allons commencer par IPV4:
  381. Listons les r&#xE8;gles actuelles, ensuite ajoutons 2 r&#xE8;gles et sauvons celles-ci, puis listons le r&#xE9;sultat. Vous pouvez faire de m&#xEA;me pour toutes les r&#xE8;gles.
  382. ```shell
  383. root@atom:/etc/iptables# cat rules.v4
  384. # Generated by iptables-save v1.6.0 on Sun Feb 11 14:27:32 2018
  385. *filter
  386. :INPUT ACCEPT [491:50774]
  387. :FORWARD ACCEPT [0:0]
  388. :OUTPUT ACCEPT [267:23983]
  389. COMMIT
  390. # Completed on Sun Feb 11 14:27:32 2018
  391. root@atom:/etc/iptables# iptables -N TCP
  392. root@atom:/etc/iptables# iptables -N UDP
  393. root@atom:/etc/iptables# service netfilter-persistent save
  394. [....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
  395. run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
  396. done.
  397. root@atom:/etc/iptables# cat rules.v4
  398. # Generated by iptables-save v1.6.0 on Sun Feb 11 14:28:24 2018
  399. *filter
  400. :INPUT ACCEPT [13:888]
  401. :FORWARD ACCEPT [0:0]
  402. :OUTPUT ACCEPT [8:944]
  403. :TCP - [0:0]
  404. :UDP - [0:0]
  405. COMMIT
  406. # Completed on Sun Feb 11 14:28:24 2018</code></pre>
  407. <p>Ne pas oublier de valider la r&#xE8;gle d&apos;acceptation des connexions existantes AVANT d&apos;entrer la r&#xE8;gle INPUT DROP sinon, vous perdez toute connexion avec votre serveur :)</p>
  408. <p>Il suffit de r&#xE9;p&#xE9;ter pour les autres r&#xE8;gles puis pour IPV6.</p>
  409. <p>Nous obtenons donc les r&#xE8;gles suivantes:</p>
  410. <p>Pour IPV4:</p>
  411. <pre><code class="language-shell">root@atom:/etc/iptables# cat rules.v4
  412. # Generated by iptables-save v1.6.0 on Sun Feb 11 15:33:41 2018
  413. *filter
  414. :INPUT DROP [0:0]
  415. :FORWARD DROP [0:0]
  416. :OUTPUT ACCEPT [105:27592]
  417. :TCP - [0:0]
  418. :UDP - [0:0]
  419. -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  420. -A INPUT -i lo -j ACCEPT
  421. -A INPUT -m conntrack --ctstate INVALID -j DROP
  422. -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
  423. -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
  424. -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
  425. -A INPUT -j REJECT --reject-with icmp-proto-unreachable
  426. -A INPUT -p tcp -j REJECT --reject-with tcp-reset
  427. -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
  428. COMMIT
  429. # Completed on Sun Feb 11 15:33:41 2018
  430. root@atom:/etc/iptables#</code></pre>
  431. <p>Pour IPV6:</p>
  432. <pre><code class="language-shell">root@atom:/etc/iptables# cat rules.v6
  433. # Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
  434. *raw
  435. :PREROUTING ACCEPT [0:0]
  436. :OUTPUT ACCEPT [0:0]
  437. -A PREROUTING -m rpfilter -j ACCEPT
  438. -A PREROUTING -j DROP
  439. COMMIT
  440. # Completed on Sun Feb 11 15:33:41 2018
  441. # Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
  442. *filter
  443. :INPUT DROP [1:144]
  444. :FORWARD DROP [0:0]
  445. :OUTPUT ACCEPT [0:0]
  446. :TCP - [0:0]
  447. :UDP - [0:0]
  448. -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  449. -A INPUT -i lo -j ACCEPT
  450. -A INPUT -p ipv6 -j ACCEPT
  451. -A INPUT -m conntrack --ctstate INVALID -j DROP
  452. -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
  453. -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
  454. -A INPUT -p tcp -j REJECT --reject-with tcp-reset
  455. -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
  456. -A OUTPUT -p ipv6-icmp -j ACCEPT
  457. -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
  458. COMMIT
  459. # Completed on Sun Feb 11 15:33:41 2018
  460. root@atom:/etc/iptables#</code></pre>
  461. <h3 id="test-dns-et-du-serveur-de-temps-avec-iptables-actif-">Test DNS et du serveur de temps (avec iptables actif)</h3>
  462. <pre><code class="language-shell">root@atom:/home/ericadmin# nslookup www.gnome.org
  463. Server: 192.168.111.254
  464. Address: 192.168.111.254#53
  465. Non-authoritative answer:
  466. www.gnome.org canonical name = proxy.gnome.org.
  467. Name: proxy.gnome.org
  468. Address: 209.132.180.168
  469. Name: proxy.gnome.org
  470. Address: 209.132.180.180
  471. root@atom:/home/ericadmin# timedatectl status
  472. Local time: dim. 2018-04-01 12:26:57 CEST
  473. Universal time: dim. 2018-04-01 10:26:57 UTC
  474. RTC time: dim. 2018-04-01 10:26:58
  475. Time zone: Europe/Paris (CEST, +0200)
  476. Network time on: yes
  477. NTP synchronized: yes
  478. RTC in local TZ: no</code></pre>
  479. <p>&#xC7;a fonctionne.</p>
  480. <h3 id="installation-de-ufw">Installation de <strong>ufw</strong></h3>
  481. <p>J&apos;avais (ai) choisi <strong>ufw</strong>; je ne l&apos;ai encore jamais utilis&#xE9;, donc, c&apos;est l&apos;occasion! Finalement, pas un tr&#xE8;s bon plan, m&#xEA;me si cela a l&apos;air tr&#xE8;s facile en premier lieu ... je vais rester sur du <strong>iptables</strong> brut avec <strong><em>iptables-persistent</em></strong>.</p>
  482. <p>Son installation est d&#xE9;taill&#xE9;e dans le paragraphe ci-dessus.</p>
  483. <pre><code class="language-shell">root@atom:/home/ericadmin# apt install ufw
  484. Lecture des listes de paquets... Fait
  485. Construction de l&apos;arbre des d&#xE9;pendances
  486. Lecture des informations d&apos;&#xE9;tat... Fait
  487. Les NOUVEAUX paquets suivants seront install&#xE9;s :
  488. ufw
  489. 0 mis &#xE0; jour, 1 nouvellement install&#xE9;s, 0 &#xE0; enlever et 0 non mis &#xE0; jour.
  490. Il est n&#xE9;cessaire de prendre 164 ko dans les archives.
  491. Apr&#xE8;s cette op&#xE9;ration, 848 ko d&apos;espace disque suppl&#xE9;mentaires seront utilis&#xE9;s.
  492. R&#xE9;ception de:1 http://deb.debian.org/debian stretch/main i386 ufw all 0.35-4 [164 kB]
  493. 164 ko r&#xE9;ceptionn&#xE9;s en 0s (1 239 ko/s)
  494. Pr&#xE9;configuration des paquets...
  495. S&#xE9;lection du paquet ufw pr&#xE9;c&#xE9;demment d&#xE9;s&#xE9;lectionn&#xE9;.
  496. (Lecture de la base de donn&#xE9;es... 31776 fichiers et r&#xE9;pertoires d&#xE9;j&#xE0; install&#xE9;s.)
  497. Pr&#xE9;paration du d&#xE9;paquetage de .../archives/ufw_0.35-4_all.deb ...
  498. D&#xE9;paquetage de ufw (0.35-4) ...
  499. Param&#xE9;trage de ufw (0.35-4) ...
  500. Creating config file /etc/ufw/before.rules with new version
  501. Creating config file /etc/ufw/before6.rules with new version
  502. Creating config file /etc/ufw/after.rules with new version
  503. Creating config file /etc/ufw/after6.rules with new version
  504. Created symlink /etc/systemd/system/multi-user.target.wants/ufw.service &#x2192; /lib/systemd/system/ufw.service.
  505. Traitement des actions diff&#xE9;r&#xE9;es (&#xAB; triggers &#xBB;) pour systemd (232-25+deb9u1) ...
  506. Traitement des actions diff&#xE9;r&#xE9;es (&#xAB; triggers &#xBB;) pour man-db (2.7.6.1-2) ...
  507. Traitement des actions diff&#xE9;r&#xE9;es (&#xAB; triggers &#xBB;) pour rsyslog (8.24.0-1) ...</code></pre>
  508. <h3 id="configuration-de-ufw">Configuration de <strong>ufw</strong></h3>
  509. <p>Apr&#xE8;s installation, le pare-feu est inactif.</p>
  510. <pre><code class="language-shell">root@atom:/home/ericadmin# ufw status
  511. Status: inactive
  512. root@atom:/home/ericadmin#</code></pre>
  513. <p>Nous allons autoriser les connexions <strong>ssh</strong> et <strong>ntp</strong>, seuls services en place pour l&apos;instant.</p>
  514. <pre><code class="language-shell">root@atom:/home/ericadmin# ufw allow 22
  515. Rules updated
  516. Rules updated (v6)
  517. root@atom:/home/ericadmin#
  518. root@atom:/etc/fail2ban# ufw allow ntp
  519. Rule added
  520. Rule added (v6)</code></pre>
  521. <h3 id="activation-du-pare-feu-">Activation du pare-feu:</h3>
  522. <pre><code class="language-shell">root@atom:/home/ericadmin# ufw enable
  523. Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
  524. Firewall is active and enabled on system startup
  525. root@atom:/home/ericadmin#</code></pre>
  526. <h3 id="v-rification-">V&#xE9;rification:</h3>
  527. <pre><code class="language-shell">root@atom:/home/ericadmin# ufw status
  528. Status: active
  529. To Action From
  530. -- -
  531. 22 ALLOW Anywhere
  532. 123 ALLOW Anywhere
  533. 22 (v6) ALLOW Anywhere (v6)
  534. 123 (v6) ALLOW Anywhere (v6)
  535. root@atom:/home/ericadmin#</code></pre>
  536. <p>Les connexions <strong>ssh</strong> et <strong>ntp</strong> sont autoris&#xE9;es, en <strong>IPV4</strong> et <strong>IPV6</strong>.</p>
  537. <p>Nous ajouterons des r&#xE8;gles en fonction des services utilis&#xE9;s.</p>
  538. <h3 id="pour-d-sactiver-le-pare-feu-">Pour d&#xE9;sactiver le pare-feu:</h3>
  539. <pre><code class="language-shell">ufw disable</code></pre>
  540. <h3 id="activation-du-logging-des-actions-de-ufw">Activation du logging des actions de <strong>ufw</strong></h3>
  541. <pre><code class="language-shell">root@atom:/home/ericadmin# ufw logging on
  542. Logging enabled
  543. root@atom:/home/ericadmin#</code></pre>
  544. <p>Vous pouvez voir l&apos;ensemble des commandes de <strong>ufw</strong> en tapant:</p>
  545. <pre><code class="language-shell">root@atom:/home/ericadmin# ufw --help
  546. Usage: ufw COMMAND
  547. Commands:
  548. enable enables the firewall
  549. disable disables the firewall
  550. default ARG set default policy
  551. logging LEVEL set logging to LEVEL
  552. allow ARGS add allow rule
  553. deny ARGS add deny rule
  554. reject ARGS add reject rule
  555. limit ARGS add limit rule
  556. delete RULE|NUM delete RULE
  557. insert NUM RULE insert RULE at NUM
  558. route RULE add route RULE
  559. route delete RULE|NUM delete route RULE
  560. route insert NUM RULE insert route RULE at NUM
  561. reload reload firewall
  562. reset reset firewall
  563. status show firewall status
  564. status numbered show firewall status as numbered list of RULES
  565. status verbose show verbose firewall status
  566. show ARG show firewall report
  567. version display version information
  568. Application profile commands:
  569. app list list application profiles
  570. app info PROFILE show information on PROFILE
  571. app update PROFILE update PROFILE
  572. app default ARG set default application policy
  573. root@atom:/home/ericadmin#</code></pre>
  574. <p>Il faut re-tester la connectivit&#xE9; en IPV4 et IPV6</p>
  575. <ol>
  576. <li>Serveur -&gt; ext&#xE9;rieur</li>
  577. <li>Ext&#xE9;rieur -&gt; serveur</li>
  578. </ol>
  579. <p>On peut utiliser l&apos;adresse <strong>ipv6.google.com</strong> pour v&#xE9;rifier la connexion IPV6 en dehors du r&#xE9;seau local.</p>
  580. </article></div><div style="background-color: #b4b2b2;width: 50px;height:50px;line-height: 50px;text-align: center;position: fixed;bottom: 10px;right: 10px;padding-top:5px;" onclick="document.documentElement.scrollTop = document.body.scrollTop =0;">
  581. <svg t="1533629773982" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1035" xlink="http://www.w3.org/1999/xlink" width="40" height="40"><defs><style type="text/css">@font-face { font-family: uc-nexus-iconfont; src: url("chrome-extension://pogijhnlcfmcppgimcaccdkmbedjkmhi/res/font_9qmmi8b8jsxxbt9.woff") format("woff"), url("chrome-extension://pogijhnlcfmcppgimcaccdkmbedjkmhi/res/font_9qmmi8b8jsxxbt9.ttf") format("truetype"); }
  582. </style></defs><path d="M536.255427 195.182354c-7.804756-7.804756-17.966187-11.615549-28.311813-11.615549-9.43693 0-18.874883 3.449565-26.496467 10.163477-2.360767 1.452071-4.356214 3.267417-6.352685 5.262864L218.47792 455.611735c-15.607466 15.60542-15.607466 40.834011 0 56.43943 15.607466 15.607466 41.558511 15.607466 57.167001 0l193.46013-192.733583 0 600.526219c0 22.1423 17.787108 39.927361 39.927361 39.927361 22.140253 0 39.927361-17.785062 39.927361-39.927361L548.959773 319.317583 737.15704 508.422522c15.607466 15.607466 40.469714 15.607466 56.078203 0 15.607466-15.607466 15.425318-40.834011-0.182149-56.441477L536.255427 195.182354 536.255427 195.182354z" p-id="1036" fill="#333"/><path d="M101.784174 143.097092l816.674071 0c22.140253 0 39.925315-17.785062 39.925315-39.927361 0-22.140253-17.784038-39.925315-39.925315-39.925315L101.784174 63.244416c-22.140253 0-39.927361 17.785062-39.927361 39.925315C61.856813 125.31203 79.643921 143.097092 101.784174 143.097092L101.784174 143.097092z" p-id="1037" fill="#333"/></svg>
  583. </div>
  584. </body></html>