Changeset 5547430 in ammosreader for doc


Ignore:
Timestamp:
05/04/22 16:12:24 (3 years ago)
Author:
Enrico Schwass <ennoausberlin@…>
Branches:
AmmosSource, guix
Children:
1b72462
Parents:
f3421e6
Message:

docs updated

Location:
doc
Files:
18 added
12 deleted
54 edited

Legend:

Unmodified
Added
Removed
  • doc/build/html/.buildinfo

    rf3421e6 r5547430  
    11# Sphinx build info version 1
    22# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
    3 config: b8c0c727f124f1ffa85da00ef3757336
     3config: 13374ee1ea55cf36915a4a11d92b21ec
    44tags: 645f666f9bcd5a90fca523b33c5a78b7
  • doc/build/html/_static/basic.css

    rf3421e6 r5547430  
    55 * Sphinx stylesheet -- basic theme.
    66 *
    7  * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
     7 * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    88 * :license: BSD, see LICENSE for details.
    99 *
     
    1414div.clearer {
    1515    clear: both;
     16}
     17
     18div.section::after {
     19    display: block;
     20    content: '';
     21    clear: left;
    1622}
    1723
     
    125131}
    126132
    127 ul.search li div.context {
     133ul.search li p.context {
    128134    color: #888;
    129135    margin: 2px 0 0 30px;
     
    230236a.headerlink {
    231237    visibility: hidden;
     238}
     239
     240a.brackets:before,
     241span.brackets > a:before{
     242    content: "[";
     243}
     244
     245a.brackets:after,
     246span.brackets > a:after {
     247    content: "]";
    232248}
    233249
     
    262278}
    263279
    264 img.align-left, .figure.align-left, object.align-left {
     280img.align-left, figure.align-left, .figure.align-left, object.align-left {
    265281    clear: left;
    266282    float: left;
     
    268284}
    269285
    270 img.align-right, .figure.align-right, object.align-right {
     286img.align-right, figure.align-right, .figure.align-right, object.align-right {
    271287    clear: right;
    272288    float: right;
     
    274290}
    275291
    276 img.align-center, .figure.align-center, object.align-center {
     292img.align-center, figure.align-center, .figure.align-center, object.align-center {
    277293  display: block;
    278294  margin-left: auto;
     
    280296}
    281297
     298img.align-default, figure.align-default, .figure.align-default {
     299  display: block;
     300  margin-left: auto;
     301  margin-right: auto;
     302}
     303
    282304.align-left {
    283305    text-align: left;
     
    288310}
    289311
     312.align-default {
     313    text-align: center;
     314}
     315
    290316.align-right {
    291317    text-align: right;
     
    294320/* -- sidebars -------------------------------------------------------------- */
    295321
    296 div.sidebar {
     322div.sidebar,
     323aside.sidebar {
    297324    margin: 0 0 0.5em 1em;
    298325    border: 1px solid #ddb;
    299     padding: 7px 7px 0 7px;
     326    padding: 7px;
    300327    background-color: #ffe;
    301328    width: 40%;
    302329    float: right;
     330    clear: right;
     331    overflow-x: auto;
    303332}
    304333
    305334p.sidebar-title {
    306335    font-weight: bold;
     336}
     337
     338div.admonition, div.topic, blockquote {
     339    clear: left;
    307340}
    308341
     
    311344div.topic {
    312345    border: 1px solid #ccc;
    313     padding: 7px 7px 0 7px;
     346    padding: 7px;
    314347    margin: 10px 0 10px 0;
    315348}
     
    333366}
    334367
    335 div.admonition dl {
    336     margin-bottom: 0;
    337 }
    338 
    339368p.admonition-title {
    340369    margin: 0px 10px 5px 0px;
     
    347376}
    348377
     378/* -- content of sidebars/topics/admonitions -------------------------------- */
     379
     380div.sidebar > :last-child,
     381aside.sidebar > :last-child,
     382div.topic > :last-child,
     383div.admonition > :last-child {
     384    margin-bottom: 0;
     385}
     386
     387div.sidebar::after,
     388aside.sidebar::after,
     389div.topic::after,
     390div.admonition::after,
     391blockquote::after {
     392    display: block;
     393    content: '';
     394    clear: both;
     395}
     396
    349397/* -- tables ---------------------------------------------------------------- */
    350398
    351399table.docutils {
     400    margin-top: 10px;
     401    margin-bottom: 10px;
    352402    border: 0;
    353403    border-collapse: collapse;
     
    355405
    356406table.align-center {
     407    margin-left: auto;
     408    margin-right: auto;
     409}
     410
     411table.align-default {
    357412    margin-left: auto;
    358413    margin-right: auto;
     
    392447}
    393448
     449th > :first-child,
     450td > :first-child {
     451    margin-top: 0px;
     452}
     453
     454th > :last-child,
     455td > :last-child {
     456    margin-bottom: 0px;
     457}
     458
    394459/* -- figures --------------------------------------------------------------- */
    395460
    396 div.figure {
     461div.figure, figure {
    397462    margin: 0.5em;
    398463    padding: 0.5em;
    399464}
    400465
    401 div.figure p.caption {
     466div.figure p.caption, figcaption {
    402467    padding: 0.3em;
    403468}
    404469
    405 div.figure p.caption span.caption-number {
     470div.figure p.caption span.caption-number,
     471figcaption span.caption-number {
    406472    font-style: italic;
    407473}
    408474
    409 div.figure p.caption span.caption-text {
     475div.figure p.caption span.caption-text,
     476figcaption span.caption-text {
    410477}
    411478
     
    434501/* -- hlist styles ---------------------------------------------------------- */
    435502
     503table.hlist {
     504    margin: 1em 0;
     505}
     506
    436507table.hlist td {
    437508    vertical-align: top;
    438509}
    439510
     511/* -- object description styles --------------------------------------------- */
     512
     513.sig {
     514        font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
     515}
     516
     517.sig-name, code.descname {
     518    background-color: transparent;
     519    font-weight: bold;
     520}
     521
     522.sig-name {
     523        font-size: 1.1em;
     524}
     525
     526code.descname {
     527    font-size: 1.2em;
     528}
     529
     530.sig-prename, code.descclassname {
     531    background-color: transparent;
     532}
     533
     534.optional {
     535    font-size: 1.3em;
     536}
     537
     538.sig-paren {
     539    font-size: larger;
     540}
     541
     542.sig-param.n {
     543        font-style: italic;
     544}
     545
     546/* C++ specific styling */
     547
     548.sig-inline.c-texpr,
     549.sig-inline.cpp-texpr {
     550        font-family: unset;
     551}
     552
     553.sig.c   .k, .sig.c   .kt,
     554.sig.cpp .k, .sig.cpp .kt {
     555        color: #0033B3;
     556}
     557
     558.sig.c   .m,
     559.sig.cpp .m {
     560        color: #1750EB;
     561}
     562
     563.sig.c   .s, .sig.c   .sc,
     564.sig.cpp .s, .sig.cpp .sc {
     565        color: #067D17;
     566}
     567
    440568
    441569/* -- other body styles ----------------------------------------------------- */
     
    461589}
    462590
     591:not(li) > ol > li:first-child > :first-child,
     592:not(li) > ul > li:first-child > :first-child {
     593    margin-top: 0px;
     594}
     595
     596:not(li) > ol > li:last-child > :last-child,
     597:not(li) > ul > li:last-child > :last-child {
     598    margin-bottom: 0px;
     599}
     600
     601ol.simple ol p,
     602ol.simple ul p,
     603ul.simple ol p,
     604ul.simple ul p {
     605    margin-top: 0;
     606}
     607
     608ol.simple > li:not(:first-child) > p,
     609ul.simple > li:not(:first-child) > p {
     610    margin-top: 0;
     611}
     612
     613ol.simple p,
     614ul.simple p {
     615    margin-bottom: 0;
     616}
     617
     618dl.footnote > dt,
     619dl.citation > dt {
     620    float: left;
     621    margin-right: 0.5em;
     622}
     623
     624dl.footnote > dd,
     625dl.citation > dd {
     626    margin-bottom: 0em;
     627}
     628
     629dl.footnote > dd:after,
     630dl.citation > dd:after {
     631    content: "";
     632    clear: both;
     633}
     634
     635dl.field-list {
     636    display: grid;
     637    grid-template-columns: fit-content(30%) auto;
     638}
     639
     640dl.field-list > dt {
     641    font-weight: bold;
     642    word-break: break-word;
     643    padding-left: 0.5em;
     644    padding-right: 5px;
     645}
     646
     647dl.field-list > dt:after {
     648    content: ":";
     649}
     650
     651dl.field-list > dd {
     652    padding-left: 0.5em;
     653    margin-top: 0em;
     654    margin-left: 0em;
     655    margin-bottom: 0em;
     656}
     657
    463658dl {
    464659    margin-bottom: 15px;
    465660}
    466661
    467 dd p {
     662dd > :first-child {
    468663    margin-top: 0px;
    469664}
     
    479674}
    480675
     676dl > dd:last-child,
     677dl > dd:last-child > :last-child {
     678    margin-bottom: 0;
     679}
     680
    481681dt:target, span.highlighted {
    482682    background-color: #fbe54e;
     
    490690    font-weight: bold;
    491691    font-size: 1.1em;
    492 }
    493 
    494 .optional {
    495     font-size: 1.3em;
    496 }
    497 
    498 .sig-paren {
    499     font-size: larger;
    500692}
    501693
     
    538730}
    539731
     732.classifier:before {
     733    font-style: normal;
     734    margin: 0 0.5em;
     735    content: ":";
     736    display: inline-block;
     737}
     738
    540739abbr, acronym {
    541740    border-bottom: dotted 1px;
     
    548747    overflow: auto;
    549748    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
     749}
     750
     751pre, div[class*="highlight-"] {
     752    clear: both;
    550753}
    551754
     
    555758    -webkit-hyphens: none;
    556759    hyphens: none;
     760    white-space: nowrap;
     761}
     762
     763div[class*="highlight-"] {
     764    margin: 1em 0;
    557765}
    558766
    559767td.linenos pre {
    560     padding: 5px 0px;
    561768    border: 0;
    562769    background-color: transparent;
     
    565772
    566773table.highlighttable {
    567     margin-left: 0.5em;
     774    display: block;
     775}
     776
     777table.highlighttable tbody {
     778    display: block;
     779}
     780
     781table.highlighttable tr {
     782    display: flex;
    568783}
    569784
    570785table.highlighttable td {
    571     padding: 0 0.5em 0 0.5em;
     786    margin: 0;
     787    padding: 0;
     788}
     789
     790table.highlighttable td.linenos {
     791    padding-right: 0.5em;
     792}
     793
     794table.highlighttable td.code {
     795    flex: 1;
     796    overflow: hidden;
     797}
     798
     799.highlight .hll {
     800    display: block;
     801}
     802
     803div.highlight pre,
     804table.highlighttable pre {
     805    margin: 0;
     806}
     807
     808div.code-block-caption + div {
     809    margin-top: 0;
    572810}
    573811
    574812div.code-block-caption {
     813    margin-top: 1em;
    575814    padding: 2px 5px;
    576815    font-size: small;
     
    581820}
    582821
    583 div.code-block-caption + div > div.highlight > pre {
    584     margin-top: 0;
     822table.highlighttable td.linenos,
     823span.linenos,
     824div.highlight span.gp {  /* gp: Generic.Prompt */
     825  user-select: none;
     826  -webkit-user-select: text; /* Safari fallback only */
     827  -webkit-user-select: none; /* Chrome/Safari */
     828  -moz-user-select: none; /* Firefox */
     829  -ms-user-select: none; /* IE10+ */
    585830}
    586831
     
    594839
    595840div.literal-block-wrapper {
    596     padding: 1em 1em 0;
    597 }
    598 
    599 div.literal-block-wrapper div.highlight {
    600     margin: 0;
    601 }
    602 
    603 code.descname {
    604     background-color: transparent;
    605     font-weight: bold;
    606     font-size: 1.2em;
    607 }
    608 
    609 code.descclassname {
    610     background-color: transparent;
     841    margin: 1em 0;
    611842}
    612843
     
    649880
    650881span.eqno a.headerlink {
    651     position: relative;
    652     left: 0px;
     882    position: absolute;
    653883    z-index: 1;
    654884}
  • doc/build/html/_static/doctools.js

    rf3421e6 r5547430  
    55 * Sphinx JavaScript utilities for all documentation.
    66 *
    7  * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
     7 * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    88 * :license: BSD, see LICENSE for details.
    99 *
     
    3030/**
    3131 * small helper function to urldecode strings
     32 *
     33 * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
    3234 */
    3335jQuery.urldecode = function(x) {
    34   return decodeURIComponent(x).replace(/\+/g, ' ');
     36  if (!x) {
     37    return x
     38  }
     39  return decodeURIComponent(x.replace(/\+/g, ' '));
    3540};
    3641
     
    8893        node.nodeValue = val.substr(0, pos);
    8994        if (isInSVG) {
    90           var bbox = span.getBBox();
    9195          var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
    92           rect.x.baseVal.value = bbox.x;
     96          var bbox = node.parentElement.getBBox();
     97          rect.x.baseVal.value = bbox.x;
    9398          rect.y.baseVal.value = bbox.y;
    9499          rect.width.baseVal.value = bbox.width;
    95100          rect.height.baseVal.value = bbox.height;
    96101          rect.setAttribute('class', className);
    97           var parentOfText = node.parentNode.parentNode;
    98102          addItems.push({
    99103              "parent": node.parentNode,
     
    261265    $('#searchbox .highlight-link').fadeOut(300);
    262266    $('span.highlighted').removeClass('highlighted');
     267    var url = new URL(window.location);
     268    url.searchParams.delete('highlight');
     269    window.history.replaceState({}, '', url);
    263270  },
    264271
     
    285292
    286293  initOnKeyListeners: function() {
    287     $(document).keyup(function(event) {
     294    $(document).keydown(function(event) {
    288295      var activeElementType = document.activeElement.tagName;
    289       // don't navigate when in search box or textarea
    290       if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
     296      // don't navigate when in search box, textarea, dropdown or button
     297      if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
     298          && activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey
     299          && !event.shiftKey) {
    291300        switch (event.keyCode) {
    292301          case 37: // left
     
    296305              return false;
    297306            }
     307            break;
    298308          case 39: // right
    299309            var nextHref = $('link[rel="next"]').prop('href');
     
    302312              return false;
    303313            }
     314            break;
    304315        }
    305316      }
  • doc/build/html/_static/documentation_options.js

    rf3421e6 r5547430  
    44    LANGUAGE: 'None',
    55    COLLAPSE_INDEX: false,
     6    BUILDER: 'html',
    67    FILE_SUFFIX: '.html',
     8    LINK_SUFFIX: '.html',
    79    HAS_SOURCE: true,
    810    SOURCELINK_SUFFIX: '.txt',
    9     NAVIGATION_WITH_KEYS: false,
     11    NAVIGATION_WITH_KEYS: false
    1012};
  • doc/build/html/_static/jquery.js

    rf3421e6 r5547430  
    1 /*!
    2  * jQuery JavaScript Library v3.3.1-dfsg
    3  * https://jquery.com/
    4  *
    5  * Includes Sizzle.js
    6  * https://sizzlejs.com/
    7  *
    8  * Copyright JS Foundation and other contributors
    9  * Released under the MIT license
    10  * https://jquery.org/license
    11  *
    12  * Date: 2019-01-30T03:06Z
    13  */
    14 ( function( global, factory ) {
    15 
    16         "use strict";
    17 
    18         if ( typeof module === "object" && typeof module.exports === "object" ) {
    19 
    20                 // For CommonJS and CommonJS-like environments where a proper `window`
    21                 // is present, execute the factory and get jQuery.
    22                 // For environments that do not have a `window` with a `document`
    23                 // (such as Node.js), expose a factory as module.exports.
    24                 // This accentuates the need for the creation of a real `window`.
    25                 // e.g. var jQuery = require("jquery")(window);
    26                 // See ticket #14549 for more info.
    27                 module.exports = global.document ?
    28                         factory( global, true ) :
    29                         function( w ) {
    30                                 if ( !w.document ) {
    31                                         throw new Error( "jQuery requires a window with a document" );
    32                                 }
    33                                 return factory( w );
    34                         };
    35         } else {
    36                 factory( global );
    37         }
    38 
    39 // Pass this if window is not defined yet
    40 } )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
    41 
    42 // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
    43 // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
    44 // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
    45 // enough that all such attempts are guarded in a try block.
    46 
    47 
    48 var arr = [];
    49 
    50 var document = window.document;
    51 
    52 var getProto = Object.getPrototypeOf;
    53 
    54 var slice = arr.slice;
    55 
    56 var concat = arr.concat;
    57 
    58 var push = arr.push;
    59 
    60 var indexOf = arr.indexOf;
    61 
    62 var class2type = {};
    63 
    64 var toString = class2type.toString;
    65 
    66 var hasOwn = class2type.hasOwnProperty;
    67 
    68 var fnToString = hasOwn.toString;
    69 
    70 var ObjectFunctionString = fnToString.call( Object );
    71 
    72 var support = {};
    73 
    74 var isFunction = function isFunction( obj ) {
    75 
    76       // Support: Chrome <=57, Firefox <=52
    77       // In some browsers, typeof returns "function" for HTML <object> elements
    78       // (i.e., `typeof document.createElement( "object" ) === "function"`).
    79       // We don't want to classify *any* DOM node as a function.
    80       return typeof obj === "function" && typeof obj.nodeType !== "number";
    81   };
    82 
    83 
    84 var isWindow = function isWindow( obj ) {
    85                 return obj != null && obj === obj.window;
    86         };
    87 
    88 
    89 
    90 
    91         var preservedScriptAttributes = {
    92                 type: true,
    93                 src: true,
    94                 noModule: true
    95         };
    96 
    97         function DOMEval( code, doc, node ) {
    98                 doc = doc || document;
    99 
    100                 var i,
    101                         script = doc.createElement( "script" );
    102 
    103                 script.text = code;
    104                 if ( node ) {
    105                         for ( i in preservedScriptAttributes ) {
    106                                 if ( node[ i ] ) {
    107                                         script[ i ] = node[ i ];
    108                                 }
    109                         }
    110                 }
    111                 doc.head.appendChild( script ).parentNode.removeChild( script );
    112         }
    113 
    114 
    115 function toType( obj ) {
    116         if ( obj == null ) {
    117                 return obj + "";
    118         }
    119 
    120         // Support: Android <=2.3 only (functionish RegExp)
    121         return typeof obj === "object" || typeof obj === "function" ?
    122                 class2type[ toString.call( obj ) ] || "object" :
    123                 typeof obj;
    124 }
    125 /* global Symbol */
    126 // Defining this global in .eslintrc.json would create a danger of using the global
    127 // unguarded in another place, it seems safer to define global only for this module
    128 
    129 
    130 
    131 var
    132         version = "3.3.1",
    133 
    134         // Define a local copy of jQuery
    135         jQuery = function( selector, context ) {
    136 
    137                 // The jQuery object is actually just the init constructor 'enhanced'
    138                 // Need init if jQuery is called (just allow error to be thrown if not included)
    139                 return new jQuery.fn.init( selector, context );
    140         },
    141 
    142         // Support: Android <=4.0 only
    143         // Make sure we trim BOM and NBSP
    144         rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
    145 
    146 jQuery.fn = jQuery.prototype = {
    147 
    148         // The current version of jQuery being used
    149         jquery: version,
    150 
    151         constructor: jQuery,
    152 
    153         // The default length of a jQuery object is 0
    154         length: 0,
    155 
    156         toArray: function() {
    157                 return slice.call( this );
    158         },
    159 
    160         // Get the Nth element in the matched element set OR
    161         // Get the whole matched element set as a clean array
    162         get: function( num ) {
    163 
    164                 // Return all the elements in a clean array
    165                 if ( num == null ) {
    166                         return slice.call( this );
    167                 }
    168 
    169                 // Return just the one element from the set
    170                 return num < 0 ? this[ num + this.length ] : this[ num ];
    171         },
    172 
    173         // Take an array of elements and push it onto the stack
    174         // (returning the new matched element set)
    175         pushStack: function( elems ) {
    176 
    177                 // Build a new jQuery matched element set
    178                 var ret = jQuery.merge( this.constructor(), elems );
    179 
    180                 // Add the old object onto the stack (as a reference)
    181                 ret.prevObject = this;
    182 
    183                 // Return the newly-formed element set
    184                 return ret;
    185         },
    186 
    187         // Execute a callback for every element in the matched set.
    188         each: function( callback ) {
    189                 return jQuery.each( this, callback );
    190         },
    191 
    192         map: function( callback ) {
    193                 return this.pushStack( jQuery.map( this, function( elem, i ) {
    194                         return callback.call( elem, i, elem );
    195                 } ) );
    196         },
    197 
    198         slice: function() {
    199                 return this.pushStack( slice.apply( this, arguments ) );
    200         },
    201 
    202         first: function() {
    203                 return this.eq( 0 );
    204         },
    205 
    206         last: function() {
    207                 return this.eq( -1 );
    208         },
    209 
    210         eq: function( i ) {
    211                 var len = this.length,
    212                         j = +i + ( i < 0 ? len : 0 );
    213                 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
    214         },
    215 
    216         end: function() {
    217                 return this.prevObject || this.constructor();
    218         },
    219 
    220         // For internal use only.
    221         // Behaves like an Array's method, not like a jQuery method.
    222         push: push,
    223         sort: arr.sort,
    224         splice: arr.splice
    225 };
    226 
    227 jQuery.extend = jQuery.fn.extend = function() {
    228         var options, name, src, copy, copyIsArray, clone,
    229                 target = arguments[ 0 ] || {},
    230                 i = 1,
    231                 length = arguments.length,
    232                 deep = false;
    233 
    234         // Handle a deep copy situation
    235         if ( typeof target === "boolean" ) {
    236                 deep = target;
    237 
    238                 // Skip the boolean and the target
    239                 target = arguments[ i ] || {};
    240                 i++;
    241         }
    242 
    243         // Handle case when target is a string or something (possible in deep copy)
    244         if ( typeof target !== "object" && !isFunction( target ) ) {
    245                 target = {};
    246         }
    247 
    248         // Extend jQuery itself if only one argument is passed
    249         if ( i === length ) {
    250                 target = this;
    251                 i--;
    252         }
    253 
    254         for ( ; i < length; i++ ) {
    255 
    256                 // Only deal with non-null/undefined values
    257                 if ( ( options = arguments[ i ] ) != null ) {
    258 
    259                         // Extend the base object
    260                         for ( name in options ) {
    261                                 src = target[ name ];
    262                                 copy = options[ name ];
    263 
    264                                 // Prevent never-ending loop
    265                                 if ( target === copy ) {
    266                                         continue;
    267                                 }
    268 
    269                                 // Recurse if we're merging plain objects or arrays
    270                                 if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
    271                                         ( copyIsArray = Array.isArray( copy ) ) ) ) {
    272 
    273                                         if ( copyIsArray ) {
    274                                                 copyIsArray = false;
    275                                                 clone = src && Array.isArray( src ) ? src : [];
    276 
    277                                         } else {
    278                                                 clone = src && jQuery.isPlainObject( src ) ? src : {};
    279                                         }
    280 
    281                                         // Never move original objects, clone them
    282                                         target[ name ] = jQuery.extend( deep, clone, copy );
    283 
    284                                 // Don't bring in undefined values
    285                                 } else if ( copy !== undefined ) {
    286                                         target[ name ] = copy;
    287                                 }
    288                         }
    289                 }
    290         }
    291 
    292         // Return the modified object
    293         return target;
    294 };
    295 
    296 jQuery.extend( {
    297 
    298         // Unique for each copy of jQuery on the page
    299         expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
    300 
    301         // Assume jQuery is ready without the ready module
    302         isReady: true,
    303 
    304         error: function( msg ) {
    305                 throw new Error( msg );
    306         },
    307 
    308         noop: function() {},
    309 
    310         isPlainObject: function( obj ) {
    311                 var proto, Ctor;
    312 
    313                 // Detect obvious negatives
    314                 // Use toString instead of jQuery.type to catch host objects
    315                 if ( !obj || toString.call( obj ) !== "[object Object]" ) {
    316                         return false;
    317                 }
    318 
    319                 proto = getProto( obj );
    320 
    321                 // Objects with no prototype (e.g., `Object.create( null )`) are plain
    322                 if ( !proto ) {
    323                         return true;
    324                 }
    325 
    326                 // Objects with prototype are plain iff they were constructed by a global Object function
    327                 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
    328                 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
    329         },
    330 
    331         isEmptyObject: function( obj ) {
    332 
    333                 /* eslint-disable no-unused-vars */
    334                 // See https://github.com/eslint/eslint/issues/6125
    335                 var name;
    336 
    337                 for ( name in obj ) {
    338                         return false;
    339                 }
    340                 return true;
    341         },
    342 
    343         // Evaluates a script in a global context
    344         globalEval: function( code ) {
    345                 DOMEval( code );
    346         },
    347 
    348         each: function( obj, callback ) {
    349                 var length, i = 0;
    350 
    351                 if ( isArrayLike( obj ) ) {
    352                         length = obj.length;
    353                         for ( ; i < length; i++ ) {
    354                                 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
    355                                         break;
    356                                 }
    357                         }
    358                 } else {
    359                         for ( i in obj ) {
    360                                 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
    361                                         break;
    362                                 }
    363                         }
    364                 }
    365 
    366                 return obj;
    367         },
    368 
    369         // Support: Android <=4.0 only
    370         trim: function( text ) {
    371                 return text == null ?
    372                         "" :
    373                         ( text + "" ).replace( rtrim, "" );
    374         },
    375 
    376         // results is for internal usage only
    377         makeArray: function( arr, results ) {
    378                 var ret = results || [];
    379 
    380                 if ( arr != null ) {
    381                         if ( isArrayLike( Object( arr ) ) ) {
    382                                 jQuery.merge( ret,
    383                                         typeof arr === "string" ?
    384                                         [ arr ] : arr
    385                                 );
    386                         } else {
    387                                 push.call( ret, arr );
    388                         }
    389                 }
    390 
    391                 return ret;
    392         },
    393 
    394         inArray: function( elem, arr, i ) {
    395                 return arr == null ? -1 : indexOf.call( arr, elem, i );
    396         },
    397 
    398         // Support: Android <=4.0 only, PhantomJS 1 only
    399         // push.apply(_, arraylike) throws on ancient WebKit
    400         merge: function( first, second ) {
    401                 var len = +second.length,
    402                         j = 0,
    403                         i = first.length;
    404 
    405                 for ( ; j < len; j++ ) {
    406                         first[ i++ ] = second[ j ];
    407                 }
    408 
    409                 first.length = i;
    410 
    411                 return first;
    412         },
    413 
    414         grep: function( elems, callback, invert ) {
    415                 var callbackInverse,
    416                         matches = [],
    417                         i = 0,
    418                         length = elems.length,
    419                         callbackExpect = !invert;
    420 
    421                 // Go through the array, only saving the items
    422                 // that pass the validator function
    423                 for ( ; i < length; i++ ) {
    424                         callbackInverse = !callback( elems[ i ], i );
    425                         if ( callbackInverse !== callbackExpect ) {
    426                                 matches.push( elems[ i ] );
    427                         }
    428                 }
    429 
    430                 return matches;
    431         },
    432 
    433         // arg is for internal usage only
    434         map: function( elems, callback, arg ) {
    435                 var length, value,
    436                         i = 0,
    437                         ret = [];
    438 
    439                 // Go through the array, translating each of the items to their new values
    440                 if ( isArrayLike( elems ) ) {
    441                         length = elems.length;
    442                         for ( ; i < length; i++ ) {
    443                                 value = callback( elems[ i ], i, arg );
    444 
    445                                 if ( value != null ) {
    446                                         ret.push( value );
    447                                 }
    448                         }
    449 
    450                 // Go through every key on the object,
    451                 } else {
    452                         for ( i in elems ) {
    453                                 value = callback( elems[ i ], i, arg );
    454 
    455                                 if ( value != null ) {
    456                                         ret.push( value );
    457                                 }
    458                         }
    459                 }
    460 
    461                 // Flatten any nested arrays
    462                 return concat.apply( [], ret );
    463         },
    464 
    465         // A global GUID counter for objects
    466         guid: 1,
    467 
    468         // jQuery.support is not used in Core but other projects attach their
    469         // properties to it so it needs to exist.
    470         support: support
    471 } );
    472 
    473 if ( typeof Symbol === "function" ) {
    474         jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
    475 }
    476 
    477 // Populate the class2type map
    478 jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
    479 function( i, name ) {
    480         class2type[ "[object " + name + "]" ] = name.toLowerCase();
    481 } );
    482 
    483 function isArrayLike( obj ) {
    484 
    485         // Support: real iOS 8.2 only (not reproducible in simulator)
    486         // `in` check used to prevent JIT error (gh-2145)
    487         // hasOwn isn't used here due to false negatives
    488         // regarding Nodelist length in IE
    489         var length = !!obj && "length" in obj && obj.length,
    490                 type = toType( obj );
    491 
    492         if ( isFunction( obj ) || isWindow( obj ) ) {
    493                 return false;
    494         }
    495 
    496         return type === "array" || length === 0 ||
    497                 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
    498 }
    499 var Sizzle =
    500 /*!
    501  * Sizzle CSS Selector Engine v2.3.3
    502  * https://sizzlejs.com/
    503  *
    504  * Copyright jQuery Foundation and other contributors
    505  * Released under the MIT license
    506  * http://jquery.org/license
    507  *
    508  * Date: 2016-08-08
    509  */
    510 (function( window ) {
    511 
    512 var i,
    513         support,
    514         Expr,
    515         getText,
    516         isXML,
    517         tokenize,
    518         compile,
    519         select,
    520         outermostContext,
    521         sortInput,
    522         hasDuplicate,
    523 
    524         // Local document vars
    525         setDocument,
    526         document,
    527         docElem,
    528         documentIsHTML,
    529         rbuggyQSA,
    530         rbuggyMatches,
    531         matches,
    532         contains,
    533 
    534         // Instance-specific data
    535         expando = "sizzle" + 1 * new Date(),
    536         preferredDoc = window.document,
    537         dirruns = 0,
    538         done = 0,
    539         classCache = createCache(),
    540         tokenCache = createCache(),
    541         compilerCache = createCache(),
    542         sortOrder = function( a, b ) {
    543                 if ( a === b ) {
    544                         hasDuplicate = true;
    545                 }
    546                 return 0;
    547         },
    548 
    549         // Instance methods
    550         hasOwn = ({}).hasOwnProperty,
    551         arr = [],
    552         pop = arr.pop,
    553         push_native = arr.push,
    554         push = arr.push,
    555         slice = arr.slice,
    556         // Use a stripped-down indexOf as it's faster than native
    557         // https://jsperf.com/thor-indexof-vs-for/5
    558         indexOf = function( list, elem ) {
    559                 var i = 0,
    560                         len = list.length;
    561                 for ( ; i < len; i++ ) {
    562                         if ( list[i] === elem ) {
    563                                 return i;
    564                         }
    565                 }
    566                 return -1;
    567         },
    568 
    569         booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
    570 
    571         // Regular expressions
    572 
    573         // http://www.w3.org/TR/css3-selectors/#whitespace
    574         whitespace = "[\\x20\\t\\r\\n\\f]",
    575 
    576         // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
    577         identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
    578 
    579         // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
    580         attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
    581                 // Operator (capture 2)
    582                 "*([*^$|!~]?=)" + whitespace +
    583                 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
    584                 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
    585                 "*\\]",
    586 
    587         pseudos = ":(" + identifier + ")(?:\\((" +
    588                 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
    589                 // 1. quoted (capture 3; capture 4 or capture 5)
    590                 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
    591                 // 2. simple (capture 6)
    592                 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
    593                 // 3. anything else (capture 2)
    594                 ".*" +
    595                 ")\\)|)",
    596 
    597         // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
    598         rwhitespace = new RegExp( whitespace + "+", "g" ),
    599         rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
    600 
    601         rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
    602         rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
    603 
    604         rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
    605 
    606         rpseudo = new RegExp( pseudos ),
    607         ridentifier = new RegExp( "^" + identifier + "$" ),
    608 
    609         matchExpr = {
    610                 "ID": new RegExp( "^#(" + identifier + ")" ),
    611                 "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
    612                 "TAG": new RegExp( "^(" + identifier + "|[*])" ),
    613                 "ATTR": new RegExp( "^" + attributes ),
    614                 "PSEUDO": new RegExp( "^" + pseudos ),
    615                 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
    616                         "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
    617                         "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
    618                 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
    619                 // For use in libraries implementing .is()
    620                 // We use this for POS matching in `select`
    621                 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
    622                         whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
    623         },
    624 
    625         rinputs = /^(?:input|select|textarea|button)$/i,
    626         rheader = /^h\d$/i,
    627 
    628         rnative = /^[^{]+\{\s*\[native \w/,
    629 
    630         // Easily-parseable/retrievable ID or TAG or CLASS selectors
    631         rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
    632 
    633         rsibling = /[+~]/,
    634 
    635         // CSS escapes
    636         // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
    637         runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
    638         funescape = function( _, escaped, escapedWhitespace ) {
    639                 var high = "0x" + escaped - 0x10000;
    640                 // NaN means non-codepoint
    641                 // Support: Firefox<24
    642                 // Workaround erroneous numeric interpretation of +"0x"
    643                 return high !== high || escapedWhitespace ?
    644                         escaped :
    645                         high < 0 ?
    646                                 // BMP codepoint
    647                                 String.fromCharCode( high + 0x10000 ) :
    648                                 // Supplemental Plane codepoint (surrogate pair)
    649                                 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
    650         },
    651 
    652         // CSS string/identifier serialization
    653         // https://drafts.csswg.org/cssom/#common-serializing-idioms
    654         rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
    655         fcssescape = function( ch, asCodePoint ) {
    656                 if ( asCodePoint ) {
    657 
    658                         // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
    659                         if ( ch === "\0" ) {
    660                                 return "\uFFFD";
    661                         }
    662 
    663                         // Control characters and (dependent upon position) numbers get escaped as code points
    664                         return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
    665                 }
    666 
    667                 // Other potentially-special ASCII characters get backslash-escaped
    668                 return "\\" + ch;
    669         },
    670 
    671         // Used for iframes
    672         // See setDocument()
    673         // Removing the function wrapper causes a "Permission Denied"
    674         // error in IE
    675         unloadHandler = function() {
    676                 setDocument();
    677         },
    678 
    679         disabledAncestor = addCombinator(
    680                 function( elem ) {
    681                         return elem.disabled === true && ("form" in elem || "label" in elem);
    682                 },
    683                 { dir: "parentNode", next: "legend" }
    684         );
    685 
    686 // Optimize for push.apply( _, NodeList )
    687 try {
    688         push.apply(
    689                 (arr = slice.call( preferredDoc.childNodes )),
    690                 preferredDoc.childNodes
    691         );
    692         // Support: Android<4.0
    693         // Detect silently failing push.apply
    694         arr[ preferredDoc.childNodes.length ].nodeType;
    695 } catch ( e ) {
    696         push = { apply: arr.length ?
    697 
    698                 // Leverage slice if possible
    699                 function( target, els ) {
    700                         push_native.apply( target, slice.call(els) );
    701                 } :
    702 
    703                 // Support: IE<9
    704                 // Otherwise append directly
    705                 function( target, els ) {
    706                         var j = target.length,
    707                                 i = 0;
    708                         // Can't trust NodeList.length
    709                         while ( (target[j++] = els[i++]) ) {}
    710                         target.length = j - 1;
    711                 }
    712         };
    713 }
    714 
    715 function Sizzle( selector, context, results, seed ) {
    716         var m, i, elem, nid, match, groups, newSelector,
    717                 newContext = context && context.ownerDocument,
    718 
    719                 // nodeType defaults to 9, since context defaults to document
    720                 nodeType = context ? context.nodeType : 9;
    721 
    722         results = results || [];
    723 
    724         // Return early from calls with invalid selector or context
    725         if ( typeof selector !== "string" || !selector ||
    726                 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
    727 
    728                 return results;
    729         }
    730 
    731         // Try to shortcut find operations (as opposed to filters) in HTML documents
    732         if ( !seed ) {
    733 
    734                 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
    735                         setDocument( context );
    736                 }
    737                 context = context || document;
    738 
    739                 if ( documentIsHTML ) {
    740 
    741                         // If the selector is sufficiently simple, try using a "get*By*" DOM method
    742                         // (excepting DocumentFragment context, where the methods don't exist)
    743                         if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
    744 
    745                                 // ID selector
    746                                 if ( (m = match[1]) ) {
    747 
    748                                         // Document context
    749                                         if ( nodeType === 9 ) {
    750                                                 if ( (elem = context.getElementById( m )) ) {
    751 
    752                                                         // Support: IE, Opera, Webkit
    753                                                         // TODO: identify versions
    754                                                         // getElementById can match elements by name instead of ID
    755                                                         if ( elem.id === m ) {
    756                                                                 results.push( elem );
    757                                                                 return results;
    758                                                         }
    759                                                 } else {
    760                                                         return results;
    761                                                 }
    762 
    763                                         // Element context
    764                                         } else {
    765 
    766                                                 // Support: IE, Opera, Webkit
    767                                                 // TODO: identify versions
    768                                                 // getElementById can match elements by name instead of ID
    769                                                 if ( newContext && (elem = newContext.getElementById( m )) &&
    770                                                         contains( context, elem ) &&
    771                                                         elem.id === m ) {
    772 
    773                                                         results.push( elem );
    774                                                         return results;
    775                                                 }
    776                                         }
    777 
    778                                 // Type selector
    779                                 } else if ( match[2] ) {
    780                                         push.apply( results, context.getElementsByTagName( selector ) );
    781                                         return results;
    782 
    783                                 // Class selector
    784                                 } else if ( (m = match[3]) && support.getElementsByClassName &&
    785                                         context.getElementsByClassName ) {
    786 
    787                                         push.apply( results, context.getElementsByClassName( m ) );
    788                                         return results;
    789                                 }
    790                         }
    791 
    792                         // Take advantage of querySelectorAll
    793                         if ( support.qsa &&
    794                                 !compilerCache[ selector + " " ] &&
    795                                 (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
    796 
    797                                 if ( nodeType !== 1 ) {
    798                                         newContext = context;
    799                                         newSelector = selector;
    800 
    801                                 // qSA looks outside Element context, which is not what we want
    802                                 // Thanks to Andrew Dupont for this workaround technique
    803                                 // Support: IE <=8
    804                                 // Exclude object elements
    805                                 } else if ( context.nodeName.toLowerCase() !== "object" ) {
    806 
    807                                         // Capture the context ID, setting it first if necessary
    808                                         if ( (nid = context.getAttribute( "id" )) ) {
    809                                                 nid = nid.replace( rcssescape, fcssescape );
    810                                         } else {
    811                                                 context.setAttribute( "id", (nid = expando) );
    812                                         }
    813 
    814                                         // Prefix every selector in the list
    815                                         groups = tokenize( selector );
    816                                         i = groups.length;
    817                                         while ( i-- ) {
    818                                                 groups[i] = "#" + nid + " " + toSelector( groups[i] );
    819                                         }
    820                                         newSelector = groups.join( "," );
    821 
    822                                         // Expand context for sibling selectors
    823                                         newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
    824                                                 context;
    825                                 }
    826 
    827                                 if ( newSelector ) {
    828                                         try {
    829                                                 push.apply( results,
    830                                                         newContext.querySelectorAll( newSelector )
    831                                                 );
    832                                                 return results;
    833                                         } catch ( qsaError ) {
    834                                         } finally {
    835                                                 if ( nid === expando ) {
    836                                                         context.removeAttribute( "id" );
    837                                                 }
    838                                         }
    839                                 }
    840                         }
    841                 }
    842         }
    843 
    844         // All others
    845         return select( selector.replace( rtrim, "$1" ), context, results, seed );
    846 }
    847 
    848 /**
    849  * Create key-value caches of limited size
    850  * @returns {function(string, object)} Returns the Object data after storing it on itself with
    851  *      property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
    852  *      deleting the oldest entry
    853  */
    854 function createCache() {
    855         var keys = [];
    856 
    857         function cache( key, value ) {
    858                 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
    859                 if ( keys.push( key + " " ) > Expr.cacheLength ) {
    860                         // Only keep the most recent entries
    861                         delete cache[ keys.shift() ];
    862                 }
    863                 return (cache[ key + " " ] = value);
    864         }
    865         return cache;
    866 }
    867 
    868 /**
    869  * Mark a function for special use by Sizzle
    870  * @param {Function} fn The function to mark
    871  */
    872 function markFunction( fn ) {
    873         fn[ expando ] = true;
    874         return fn;
    875 }
    876 
    877 /**
    878  * Support testing using an element
    879  * @param {Function} fn Passed the created element and returns a boolean result
    880  */
    881 function assert( fn ) {
    882         var el = document.createElement("fieldset");
    883 
    884         try {
    885                 return !!fn( el );
    886         } catch (e) {
    887                 return false;
    888         } finally {
    889                 // Remove from its parent by default
    890                 if ( el.parentNode ) {
    891                         el.parentNode.removeChild( el );
    892                 }
    893                 // release memory in IE
    894                 el = null;
    895         }
    896 }
    897 
    898 /**
    899  * Adds the same handler for all of the specified attrs
    900  * @param {String} attrs Pipe-separated list of attributes
    901  * @param {Function} handler The method that will be applied
    902  */
    903 function addHandle( attrs, handler ) {
    904         var arr = attrs.split("|"),
    905                 i = arr.length;
    906 
    907         while ( i-- ) {
    908                 Expr.attrHandle[ arr[i] ] = handler;
    909         }
    910 }
    911 
    912 /**
    913  * Checks document order of two siblings
    914  * @param {Element} a
    915  * @param {Element} b
    916  * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
    917  */
    918 function siblingCheck( a, b ) {
    919         var cur = b && a,
    920                 diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
    921                         a.sourceIndex - b.sourceIndex;
    922 
    923         // Use IE sourceIndex if available on both nodes
    924         if ( diff ) {
    925                 return diff;
    926         }
    927 
    928         // Check if b follows a
    929         if ( cur ) {
    930                 while ( (cur = cur.nextSibling) ) {
    931                         if ( cur === b ) {
    932                                 return -1;
    933                         }
    934                 }
    935         }
    936 
    937         return a ? 1 : -1;
    938 }
    939 
    940 /**
    941  * Returns a function to use in pseudos for input types
    942  * @param {String} type
    943  */
    944 function createInputPseudo( type ) {
    945         return function( elem ) {
    946                 var name = elem.nodeName.toLowerCase();
    947                 return name === "input" && elem.type === type;
    948         };
    949 }
    950 
    951 /**
    952  * Returns a function to use in pseudos for buttons
    953  * @param {String} type
    954  */
    955 function createButtonPseudo( type ) {
    956         return function( elem ) {
    957                 var name = elem.nodeName.toLowerCase();
    958                 return (name === "input" || name === "button") && elem.type === type;
    959         };
    960 }
    961 
    962 /**
    963  * Returns a function to use in pseudos for :enabled/:disabled
    964  * @param {Boolean} disabled true for :disabled; false for :enabled
    965  */
    966 function createDisabledPseudo( disabled ) {
    967 
    968         // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
    969         return function( elem ) {
    970 
    971                 // Only certain elements can match :enabled or :disabled
    972                 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
    973                 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
    974                 if ( "form" in elem ) {
    975 
    976                         // Check for inherited disabledness on relevant non-disabled elements:
    977                         // * listed form-associated elements in a disabled fieldset
    978                         //   https://html.spec.whatwg.org/multipage/forms.html#category-listed
    979                         //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
    980                         // * option elements in a disabled optgroup
    981                         //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
    982                         // All such elements have a "form" property.
    983                         if ( elem.parentNode && elem.disabled === false ) {
    984 
    985                                 // Option elements defer to a parent optgroup if present
    986                                 if ( "label" in elem ) {
    987                                         if ( "label" in elem.parentNode ) {
    988                                                 return elem.parentNode.disabled === disabled;
    989                                         } else {
    990                                                 return elem.disabled === disabled;
    991                                         }
    992                                 }
    993 
    994                                 // Support: IE 6 - 11
    995                                 // Use the isDisabled shortcut property to check for disabled fieldset ancestors
    996                                 return elem.isDisabled === disabled ||
    997 
    998                                         // Where there is no isDisabled, check manually
    999                                         /* jshint -W018 */
    1000                                         elem.isDisabled !== !disabled &&
    1001                                                 disabledAncestor( elem ) === disabled;
    1002                         }
    1003 
    1004                         return elem.disabled === disabled;
    1005 
    1006                 // Try to winnow out elements that can't be disabled before trusting the disabled property.
    1007                 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
    1008                 // even exist on them, let alone have a boolean value.
    1009                 } else if ( "label" in elem ) {
    1010                         return elem.disabled === disabled;
    1011                 }
    1012 
    1013                 // Remaining elements are neither :enabled nor :disabled
    1014                 return false;
    1015         };
    1016 }
    1017 
    1018 /**
    1019  * Returns a function to use in pseudos for positionals
    1020  * @param {Function} fn
    1021  */
    1022 function createPositionalPseudo( fn ) {
    1023         return markFunction(function( argument ) {
    1024                 argument = +argument;
    1025                 return markFunction(function( seed, matches ) {
    1026                         var j,
    1027                                 matchIndexes = fn( [], seed.length, argument ),
    1028                                 i = matchIndexes.length;
    1029 
    1030                         // Match elements found at the specified indexes
    1031                         while ( i-- ) {
    1032                                 if ( seed[ (j = matchIndexes[i]) ] ) {
    1033                                         seed[j] = !(matches[j] = seed[j]);
    1034                                 }
    1035                         }
    1036                 });
    1037         });
    1038 }
    1039 
    1040 /**
    1041  * Checks a node for validity as a Sizzle context
    1042  * @param {Element|Object=} context
    1043  * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
    1044  */
    1045 function testContext( context ) {
    1046         return context && typeof context.getElementsByTagName !== "undefined" && context;
    1047 }
    1048 
    1049 // Expose support vars for convenience
    1050 support = Sizzle.support = {};
    1051 
    1052 /**
    1053  * Detects XML nodes
    1054  * @param {Element|Object} elem An element or a document
    1055  * @returns {Boolean} True iff elem is a non-HTML XML node
    1056  */
    1057 isXML = Sizzle.isXML = function( elem ) {
    1058         // documentElement is verified for cases where it doesn't yet exist
    1059         // (such as loading iframes in IE - #4833)
    1060         var documentElement = elem && (elem.ownerDocument || elem).documentElement;
    1061         return documentElement ? documentElement.nodeName !== "HTML" : false;
    1062 };
    1063 
    1064 /**
    1065  * Sets document-related variables once based on the current document
    1066  * @param {Element|Object} [doc] An element or document object to use to set the document
    1067  * @returns {Object} Returns the current document
    1068  */
    1069 setDocument = Sizzle.setDocument = function( node ) {
    1070         var hasCompare, subWindow,
    1071                 doc = node ? node.ownerDocument || node : preferredDoc;
    1072 
    1073         // Return early if doc is invalid or already selected
    1074         if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
    1075                 return document;
    1076         }
    1077 
    1078         // Update global variables
    1079         document = doc;
    1080         docElem = document.documentElement;
    1081         documentIsHTML = !isXML( document );
    1082 
    1083         // Support: IE 9-11, Edge
    1084         // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
    1085         if ( preferredDoc !== document &&
    1086                 (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
    1087 
    1088                 // Support: IE 11, Edge
    1089                 if ( subWindow.addEventListener ) {
    1090                         subWindow.addEventListener( "unload", unloadHandler, false );
    1091 
    1092                 // Support: IE 9 - 10 only
    1093                 } else if ( subWindow.attachEvent ) {
    1094                         subWindow.attachEvent( "onunload", unloadHandler );
    1095                 }
    1096         }
    1097 
    1098         /* Attributes
    1099         ---------------------------------------------------------------------- */
    1100 
    1101         // Support: IE<8
    1102         // Verify that getAttribute really returns attributes and not properties
    1103         // (excepting IE8 booleans)
    1104         support.attributes = assert(function( el ) {
    1105                 el.className = "i";
    1106                 return !el.getAttribute("className");
    1107         });
    1108 
    1109         /* getElement(s)By*
    1110         ---------------------------------------------------------------------- */
    1111 
    1112         // Check if getElementsByTagName("*") returns only elements
    1113         support.getElementsByTagName = assert(function( el ) {
    1114                 el.appendChild( document.createComment("") );
    1115                 return !el.getElementsByTagName("*").length;
    1116         });
    1117 
    1118         // Support: IE<9
    1119         support.getElementsByClassName = rnative.test( document.getElementsByClassName );
    1120 
    1121         // Support: IE<10
    1122         // Check if getElementById returns elements by name
    1123         // The broken getElementById methods don't pick up programmatically-set names,
    1124         // so use a roundabout getElementsByName test
    1125         support.getById = assert(function( el ) {
    1126                 docElem.appendChild( el ).id = expando;
    1127                 return !document.getElementsByName || !document.getElementsByName( expando ).length;
    1128         });
    1129 
    1130         // ID filter and find
    1131         if ( support.getById ) {
    1132                 Expr.filter["ID"] = function( id ) {
    1133                         var attrId = id.replace( runescape, funescape );
    1134                         return function( elem ) {
    1135                                 return elem.getAttribute("id") === attrId;
    1136                         };
    1137                 };
    1138                 Expr.find["ID"] = function( id, context ) {
    1139                         if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
    1140                                 var elem = context.getElementById( id );
    1141                                 return elem ? [ elem ] : [];
    1142                         }
    1143                 };
    1144         } else {
    1145                 Expr.filter["ID"] =  function( id ) {
    1146                         var attrId = id.replace( runescape, funescape );
    1147                         return function( elem ) {
    1148                                 var node = typeof elem.getAttributeNode !== "undefined" &&
    1149                                         elem.getAttributeNode("id");
    1150                                 return node && node.value === attrId;
    1151                         };
    1152                 };
    1153 
    1154                 // Support: IE 6 - 7 only
    1155                 // getElementById is not reliable as a find shortcut
    1156                 Expr.find["ID"] = function( id, context ) {
    1157                         if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
    1158                                 var node, i, elems,
    1159                                         elem = context.getElementById( id );
    1160 
    1161                                 if ( elem ) {
    1162 
    1163                                         // Verify the id attribute
    1164                                         node = elem.getAttributeNode("id");
    1165                                         if ( node && node.value === id ) {
    1166                                                 return [ elem ];
    1167                                         }
    1168 
    1169                                         // Fall back on getElementsByName
    1170                                         elems = context.getElementsByName( id );
    1171                                         i = 0;
    1172                                         while ( (elem = elems[i++]) ) {
    1173                                                 node = elem.getAttributeNode("id");
    1174                                                 if ( node && node.value === id ) {
    1175                                                         return [ elem ];
    1176                                                 }
    1177                                         }
    1178                                 }
    1179 
    1180                                 return [];
    1181                         }
    1182                 };
    1183         }
    1184 
    1185         // Tag
    1186         Expr.find["TAG"] = support.getElementsByTagName ?
    1187                 function( tag, context ) {
    1188                         if ( typeof context.getElementsByTagName !== "undefined" ) {
    1189                                 return context.getElementsByTagName( tag );
    1190 
    1191                         // DocumentFragment nodes don't have gEBTN
    1192                         } else if ( support.qsa ) {
    1193                                 return context.querySelectorAll( tag );
    1194                         }
    1195                 } :
    1196 
    1197                 function( tag, context ) {
    1198                         var elem,
    1199                                 tmp = [],
    1200                                 i = 0,
    1201                                 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
    1202                                 results = context.getElementsByTagName( tag );
    1203 
    1204                         // Filter out possible comments
    1205                         if ( tag === "*" ) {
    1206                                 while ( (elem = results[i++]) ) {
    1207                                         if ( elem.nodeType === 1 ) {
    1208                                                 tmp.push( elem );
    1209                                         }
    1210                                 }
    1211 
    1212                                 return tmp;
    1213                         }
    1214                         return results;
    1215                 };
    1216 
    1217         // Class
    1218         Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
    1219                 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
    1220                         return context.getElementsByClassName( className );
    1221                 }
    1222         };
    1223 
    1224         /* QSA/matchesSelector
    1225         ---------------------------------------------------------------------- */
    1226 
    1227         // QSA and matchesSelector support
    1228 
    1229         // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
    1230         rbuggyMatches = [];
    1231 
    1232         // qSa(:focus) reports false when true (Chrome 21)
    1233         // We allow this because of a bug in IE8/9 that throws an error
    1234         // whenever `document.activeElement` is accessed on an iframe
    1235         // So, we allow :focus to pass through QSA all the time to avoid the IE error
    1236         // See https://bugs.jquery.com/ticket/13378
    1237         rbuggyQSA = [];
    1238 
    1239         if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
    1240                 // Build QSA regex
    1241                 // Regex strategy adopted from Diego Perini
    1242                 assert(function( el ) {
    1243                         // Select is set to empty string on purpose
    1244                         // This is to test IE's treatment of not explicitly
    1245                         // setting a boolean content attribute,
    1246                         // since its presence should be enough
    1247                         // https://bugs.jquery.com/ticket/12359
    1248                         docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
    1249                                 "<select id='" + expando + "-\r\\' msallowcapture=''>" +
    1250                                 "<option selected=''></option></select>";
    1251 
    1252                         // Support: IE8, Opera 11-12.16
    1253                         // Nothing should be selected when empty strings follow ^= or $= or *=
    1254                         // The test attribute must be unknown in Opera but "safe" for WinRT
    1255                         // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
    1256                         if ( el.querySelectorAll("[msallowcapture^='']").length ) {
    1257                                 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
    1258                         }
    1259 
    1260                         // Support: IE8
    1261                         // Boolean attributes and "value" are not treated correctly
    1262                         if ( !el.querySelectorAll("[selected]").length ) {
    1263                                 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
    1264                         }
    1265 
    1266                         // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
    1267                         if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
    1268                                 rbuggyQSA.push("~=");
    1269                         }
    1270 
    1271                         // Webkit/Opera - :checked should return selected option elements
    1272                         // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
    1273                         // IE8 throws error here and will not see later tests
    1274                         if ( !el.querySelectorAll(":checked").length ) {
    1275                                 rbuggyQSA.push(":checked");
    1276                         }
    1277 
    1278                         // Support: Safari 8+, iOS 8+
    1279                         // https://bugs.webkit.org/show_bug.cgi?id=136851
    1280                         // In-page `selector#id sibling-combinator selector` fails
    1281                         if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
    1282                                 rbuggyQSA.push(".#.+[+~]");
    1283                         }
    1284                 });
    1285 
    1286                 assert(function( el ) {
    1287                         el.innerHTML = "<a href='' disabled='disabled'></a>" +
    1288                                 "<select disabled='disabled'><option/></select>";
    1289 
    1290                         // Support: Windows 8 Native Apps
    1291                         // The type and name attributes are restricted during .innerHTML assignment
    1292                         var input = document.createElement("input");
    1293                         input.setAttribute( "type", "hidden" );
    1294                         el.appendChild( input ).setAttribute( "name", "D" );
    1295 
    1296                         // Support: IE8
    1297                         // Enforce case-sensitivity of name attribute
    1298                         if ( el.querySelectorAll("[name=d]").length ) {
    1299                                 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
    1300                         }
    1301 
    1302                         // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
    1303                         // IE8 throws error here and will not see later tests
    1304                         if ( el.querySelectorAll(":enabled").length !== 2 ) {
    1305                                 rbuggyQSA.push( ":enabled", ":disabled" );
    1306                         }
    1307 
    1308                         // Support: IE9-11+
    1309                         // IE's :disabled selector does not pick up the children of disabled fieldsets
    1310                         docElem.appendChild( el ).disabled = true;
    1311                         if ( el.querySelectorAll(":disabled").length !== 2 ) {
    1312                                 rbuggyQSA.push( ":enabled", ":disabled" );
    1313                         }
    1314 
    1315                         // Opera 10-11 does not throw on post-comma invalid pseudos
    1316                         el.querySelectorAll("*,:x");
    1317                         rbuggyQSA.push(",.*:");
    1318                 });
    1319         }
    1320 
    1321         if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
    1322                 docElem.webkitMatchesSelector ||
    1323                 docElem.mozMatchesSelector ||
    1324                 docElem.oMatchesSelector ||
    1325                 docElem.msMatchesSelector) )) ) {
    1326 
    1327                 assert(function( el ) {
    1328                         // Check to see if it's possible to do matchesSelector
    1329                         // on a disconnected node (IE 9)
    1330                         support.disconnectedMatch = matches.call( el, "*" );
    1331 
    1332                         // This should fail with an exception
    1333                         // Gecko does not error, returns false instead
    1334                         matches.call( el, "[s!='']:x" );
    1335                         rbuggyMatches.push( "!=", pseudos );
    1336                 });
    1337         }
    1338 
    1339         rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
    1340         rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
    1341 
    1342         /* Contains
    1343         ---------------------------------------------------------------------- */
    1344         hasCompare = rnative.test( docElem.compareDocumentPosition );
    1345 
    1346         // Element contains another
    1347         // Purposefully self-exclusive
    1348         // As in, an element does not contain itself
    1349         contains = hasCompare || rnative.test( docElem.contains ) ?
    1350                 function( a, b ) {
    1351                         var adown = a.nodeType === 9 ? a.documentElement : a,
    1352                                 bup = b && b.parentNode;
    1353                         return a === bup || !!( bup && bup.nodeType === 1 && (
    1354                                 adown.contains ?
    1355                                         adown.contains( bup ) :
    1356                                         a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
    1357                         ));
    1358                 } :
    1359                 function( a, b ) {
    1360                         if ( b ) {
    1361                                 while ( (b = b.parentNode) ) {
    1362                                         if ( b === a ) {
    1363                                                 return true;
    1364                                         }
    1365                                 }
    1366                         }
    1367                         return false;
    1368                 };
    1369 
    1370         /* Sorting
    1371         ---------------------------------------------------------------------- */
    1372 
    1373         // Document order sorting
    1374         sortOrder = hasCompare ?
    1375         function( a, b ) {
    1376 
    1377                 // Flag for duplicate removal
    1378                 if ( a === b ) {
    1379                         hasDuplicate = true;
    1380                         return 0;
    1381                 }
    1382 
    1383                 // Sort on method existence if only one input has compareDocumentPosition
    1384                 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
    1385                 if ( compare ) {
    1386                         return compare;
    1387                 }
    1388 
    1389                 // Calculate position if both inputs belong to the same document
    1390                 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
    1391                         a.compareDocumentPosition( b ) :
    1392 
    1393                         // Otherwise we know they are disconnected
    1394                         1;
    1395 
    1396                 // Disconnected nodes
    1397                 if ( compare & 1 ||
    1398                         (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
    1399 
    1400                         // Choose the first element that is related to our preferred document
    1401                         if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
    1402                                 return -1;
    1403                         }
    1404                         if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
    1405                                 return 1;
    1406                         }
    1407 
    1408                         // Maintain original order
    1409                         return sortInput ?
    1410                                 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
    1411                                 0;
    1412                 }
    1413 
    1414                 return compare & 4 ? -1 : 1;
    1415         } :
    1416         function( a, b ) {
    1417                 // Exit early if the nodes are identical
    1418                 if ( a === b ) {
    1419                         hasDuplicate = true;
    1420                         return 0;
    1421                 }
    1422 
    1423                 var cur,
    1424                         i = 0,
    1425                         aup = a.parentNode,
    1426                         bup = b.parentNode,
    1427                         ap = [ a ],
    1428                         bp = [ b ];
    1429 
    1430                 // Parentless nodes are either documents or disconnected
    1431                 if ( !aup || !bup ) {
    1432                         return a === document ? -1 :
    1433                                 b === document ? 1 :
    1434                                 aup ? -1 :
    1435                                 bup ? 1 :
    1436                                 sortInput ?
    1437                                 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
    1438                                 0;
    1439 
    1440                 // If the nodes are siblings, we can do a quick check
    1441                 } else if ( aup === bup ) {
    1442                         return siblingCheck( a, b );
    1443                 }
    1444 
    1445                 // Otherwise we need full lists of their ancestors for comparison
    1446                 cur = a;
    1447                 while ( (cur = cur.parentNode) ) {
    1448                         ap.unshift( cur );
    1449                 }
    1450                 cur = b;
    1451                 while ( (cur = cur.parentNode) ) {
    1452                         bp.unshift( cur );
    1453                 }
    1454 
    1455                 // Walk down the tree looking for a discrepancy
    1456                 while ( ap[i] === bp[i] ) {
    1457                         i++;
    1458                 }
    1459 
    1460                 return i ?
    1461                         // Do a sibling check if the nodes have a common ancestor
    1462                         siblingCheck( ap[i], bp[i] ) :
    1463 
    1464                         // Otherwise nodes in our document sort first
    1465                         ap[i] === preferredDoc ? -1 :
    1466                         bp[i] === preferredDoc ? 1 :
    1467                         0;
    1468         };
    1469 
    1470         return document;
    1471 };
    1472 
    1473 Sizzle.matches = function( expr, elements ) {
    1474         return Sizzle( expr, null, null, elements );
    1475 };
    1476 
    1477 Sizzle.matchesSelector = function( elem, expr ) {
    1478         // Set document vars if needed
    1479         if ( ( elem.ownerDocument || elem ) !== document ) {
    1480                 setDocument( elem );
    1481         }
    1482 
    1483         // Make sure that attribute selectors are quoted
    1484         expr = expr.replace( rattributeQuotes, "='$1']" );
    1485 
    1486         if ( support.matchesSelector && documentIsHTML &&
    1487                 !compilerCache[ expr + " " ] &&
    1488                 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
    1489                 ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
    1490 
    1491                 try {
    1492                         var ret = matches.call( elem, expr );
    1493 
    1494                         // IE 9's matchesSelector returns false on disconnected nodes
    1495                         if ( ret || support.disconnectedMatch ||
    1496                                         // As well, disconnected nodes are said to be in a document
    1497                                         // fragment in IE 9
    1498                                         elem.document && elem.document.nodeType !== 11 ) {
    1499                                 return ret;
    1500                         }
    1501                 } catch (e) {}
    1502         }
    1503 
    1504         return Sizzle( expr, document, null, [ elem ] ).length > 0;
    1505 };
    1506 
    1507 Sizzle.contains = function( context, elem ) {
    1508         // Set document vars if needed
    1509         if ( ( context.ownerDocument || context ) !== document ) {
    1510                 setDocument( context );
    1511         }
    1512         return contains( context, elem );
    1513 };
    1514 
    1515 Sizzle.attr = function( elem, name ) {
    1516         // Set document vars if needed
    1517         if ( ( elem.ownerDocument || elem ) !== document ) {
    1518                 setDocument( elem );
    1519         }
    1520 
    1521         var fn = Expr.attrHandle[ name.toLowerCase() ],
    1522                 // Don't get fooled by Object.prototype properties (jQuery #13807)
    1523                 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
    1524                         fn( elem, name, !documentIsHTML ) :
    1525                         undefined;
    1526 
    1527         return val !== undefined ?
    1528                 val :
    1529                 support.attributes || !documentIsHTML ?
    1530                         elem.getAttribute( name ) :
    1531                         (val = elem.getAttributeNode(name)) && val.specified ?
    1532                                 val.value :
    1533                                 null;
    1534 };
    1535 
    1536 Sizzle.escape = function( sel ) {
    1537         return (sel + "").replace( rcssescape, fcssescape );
    1538 };
    1539 
    1540 Sizzle.error = function( msg ) {
    1541         throw new Error( "Syntax error, unrecognized expression: " + msg );
    1542 };
    1543 
    1544 /**
    1545  * Document sorting and removing duplicates
    1546  * @param {ArrayLike} results
    1547  */
    1548 Sizzle.uniqueSort = function( results ) {
    1549         var elem,
    1550                 duplicates = [],
    1551                 j = 0,
    1552                 i = 0;
    1553 
    1554         // Unless we *know* we can detect duplicates, assume their presence
    1555         hasDuplicate = !support.detectDuplicates;
    1556         sortInput = !support.sortStable && results.slice( 0 );
    1557         results.sort( sortOrder );
    1558 
    1559         if ( hasDuplicate ) {
    1560                 while ( (elem = results[i++]) ) {
    1561                         if ( elem === results[ i ] ) {
    1562                                 j = duplicates.push( i );
    1563                         }
    1564                 }
    1565                 while ( j-- ) {
    1566                         results.splice( duplicates[ j ], 1 );
    1567                 }
    1568         }
    1569 
    1570         // Clear input after sorting to release objects
    1571         // See https://github.com/jquery/sizzle/pull/225
    1572         sortInput = null;
    1573 
    1574         return results;
    1575 };
    1576 
    1577 /**
    1578  * Utility function for retrieving the text value of an array of DOM nodes
    1579  * @param {Array|Element} elem
    1580  */
    1581 getText = Sizzle.getText = function( elem ) {
    1582         var node,
    1583                 ret = "",
    1584                 i = 0,
    1585                 nodeType = elem.nodeType;
    1586 
    1587         if ( !nodeType ) {
    1588                 // If no nodeType, this is expected to be an array
    1589                 while ( (node = elem[i++]) ) {
    1590                         // Do not traverse comment nodes
    1591                         ret += getText( node );
    1592                 }
    1593         } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
    1594                 // Use textContent for elements
    1595                 // innerText usage removed for consistency of new lines (jQuery #11153)
    1596                 if ( typeof elem.textContent === "string" ) {
    1597                         return elem.textContent;
    1598                 } else {
    1599                         // Traverse its children
    1600                         for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
    1601                                 ret += getText( elem );
    1602                         }
    1603                 }
    1604         } else if ( nodeType === 3 || nodeType === 4 ) {
    1605                 return elem.nodeValue;
    1606         }
    1607         // Do not include comment or processing instruction nodes
    1608 
    1609         return ret;
    1610 };
    1611 
    1612 Expr = Sizzle.selectors = {
    1613 
    1614         // Can be adjusted by the user
    1615         cacheLength: 50,
    1616 
    1617         createPseudo: markFunction,
    1618 
    1619         match: matchExpr,
    1620 
    1621         attrHandle: {},
    1622 
    1623         find: {},
    1624 
    1625         relative: {
    1626                 ">": { dir: "parentNode", first: true },
    1627                 " ": { dir: "parentNode" },
    1628                 "+": { dir: "previousSibling", first: true },
    1629                 "~": { dir: "previousSibling" }
    1630         },
    1631 
    1632         preFilter: {
    1633                 "ATTR": function( match ) {
    1634                         match[1] = match[1].replace( runescape, funescape );
    1635 
    1636                         // Move the given value to match[3] whether quoted or unquoted
    1637                         match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
    1638 
    1639                         if ( match[2] === "~=" ) {
    1640                                 match[3] = " " + match[3] + " ";
    1641                         }
    1642 
    1643                         return match.slice( 0, 4 );
    1644                 },
    1645 
    1646                 "CHILD": function( match ) {
    1647                         /* matches from matchExpr["CHILD"]
    1648                                 1 type (only|nth|...)
    1649                                 2 what (child|of-type)
    1650                                 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
    1651                                 4 xn-component of xn+y argument ([+-]?\d*n|)
    1652                                 5 sign of xn-component
    1653                                 6 x of xn-component
    1654                                 7 sign of y-component
    1655                                 8 y of y-component
    1656                         */
    1657                         match[1] = match[1].toLowerCase();
    1658 
    1659                         if ( match[1].slice( 0, 3 ) === "nth" ) {
    1660                                 // nth-* requires argument
    1661                                 if ( !match[3] ) {
    1662                                         Sizzle.error( match[0] );
    1663                                 }
    1664 
    1665                                 // numeric x and y parameters for Expr.filter.CHILD
    1666                                 // remember that false/true cast respectively to 0/1
    1667                                 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
    1668                                 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
    1669 
    1670                         // other types prohibit arguments
    1671                         } else if ( match[3] ) {
    1672                                 Sizzle.error( match[0] );
    1673                         }
    1674 
    1675                         return match;
    1676                 },
    1677 
    1678                 "PSEUDO": function( match ) {
    1679                         var excess,
    1680                                 unquoted = !match[6] && match[2];
    1681 
    1682                         if ( matchExpr["CHILD"].test( match[0] ) ) {
    1683                                 return null;
    1684                         }
    1685 
    1686                         // Accept quoted arguments as-is
    1687                         if ( match[3] ) {
    1688                                 match[2] = match[4] || match[5] || "";
    1689 
    1690                         // Strip excess characters from unquoted arguments
    1691                         } else if ( unquoted && rpseudo.test( unquoted ) &&
    1692                                 // Get excess from tokenize (recursively)
    1693                                 (excess = tokenize( unquoted, true )) &&
    1694                                 // advance to the next closing parenthesis
    1695                                 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
    1696 
    1697                                 // excess is a negative index
    1698                                 match[0] = match[0].slice( 0, excess );
    1699                                 match[2] = unquoted.slice( 0, excess );
    1700                         }
    1701 
    1702                         // Return only captures needed by the pseudo filter method (type and argument)
    1703                         return match.slice( 0, 3 );
    1704                 }
    1705         },
    1706 
    1707         filter: {
    1708 
    1709                 "TAG": function( nodeNameSelector ) {
    1710                         var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
    1711                         return nodeNameSelector === "*" ?
    1712                                 function() { return true; } :
    1713                                 function( elem ) {
    1714                                         return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
    1715                                 };
    1716                 },
    1717 
    1718                 "CLASS": function( className ) {
    1719                         var pattern = classCache[ className + " " ];
    1720 
    1721                         return pattern ||
    1722                                 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
    1723                                 classCache( className, function( elem ) {
    1724                                         return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
    1725                                 });
    1726                 },
    1727 
    1728                 "ATTR": function( name, operator, check ) {
    1729                         return function( elem ) {
    1730                                 var result = Sizzle.attr( elem, name );
    1731 
    1732                                 if ( result == null ) {
    1733                                         return operator === "!=";
    1734                                 }
    1735                                 if ( !operator ) {
    1736                                         return true;
    1737                                 }
    1738 
    1739                                 result += "";
    1740 
    1741                                 return operator === "=" ? result === check :
    1742                                         operator === "!=" ? result !== check :
    1743                                         operator === "^=" ? check && result.indexOf( check ) === 0 :
    1744                                         operator === "*=" ? check && result.indexOf( check ) > -1 :
    1745                                         operator === "$=" ? check && result.slice( -check.length ) === check :
    1746                                         operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
    1747                                         operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
    1748                                         false;
    1749                         };
    1750                 },
    1751 
    1752                 "CHILD": function( type, what, argument, first, last ) {
    1753                         var simple = type.slice( 0, 3 ) !== "nth",
    1754                                 forward = type.slice( -4 ) !== "last",
    1755                                 ofType = what === "of-type";
    1756 
    1757                         return first === 1 && last === 0 ?
    1758 
    1759                                 // Shortcut for :nth-*(n)
    1760                                 function( elem ) {
    1761                                         return !!elem.parentNode;
    1762                                 } :
    1763 
    1764                                 function( elem, context, xml ) {
    1765                                         var cache, uniqueCache, outerCache, node, nodeIndex, start,
    1766                                                 dir = simple !== forward ? "nextSibling" : "previousSibling",
    1767                                                 parent = elem.parentNode,
    1768                                                 name = ofType && elem.nodeName.toLowerCase(),
    1769                                                 useCache = !xml && !ofType,
    1770                                                 diff = false;
    1771 
    1772                                         if ( parent ) {
    1773 
    1774                                                 // :(first|last|only)-(child|of-type)
    1775                                                 if ( simple ) {
    1776                                                         while ( dir ) {
    1777                                                                 node = elem;
    1778                                                                 while ( (node = node[ dir ]) ) {
    1779                                                                         if ( ofType ?
    1780                                                                                 node.nodeName.toLowerCase() === name :
    1781                                                                                 node.nodeType === 1 ) {
    1782 
    1783                                                                                 return false;
    1784                                                                         }
    1785                                                                 }
    1786                                                                 // Reverse direction for :only-* (if we haven't yet done so)
    1787                                                                 start = dir = type === "only" && !start && "nextSibling";
    1788                                                         }
    1789                                                         return true;
    1790                                                 }
    1791 
    1792                                                 start = [ forward ? parent.firstChild : parent.lastChild ];
    1793 
    1794                                                 // non-xml :nth-child(...) stores cache data on `parent`
    1795                                                 if ( forward && useCache ) {
    1796 
    1797                                                         // Seek `elem` from a previously-cached index
    1798 
    1799                                                         // ...in a gzip-friendly way
    1800                                                         node = parent;
    1801                                                         outerCache = node[ expando ] || (node[ expando ] = {});
    1802 
    1803                                                         // Support: IE <9 only
    1804                                                         // Defend against cloned attroperties (jQuery gh-1709)
    1805                                                         uniqueCache = outerCache[ node.uniqueID ] ||
    1806                                                                 (outerCache[ node.uniqueID ] = {});
    1807 
    1808                                                         cache = uniqueCache[ type ] || [];
    1809                                                         nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
    1810                                                         diff = nodeIndex && cache[ 2 ];
    1811                                                         node = nodeIndex && parent.childNodes[ nodeIndex ];
    1812 
    1813                                                         while ( (node = ++nodeIndex && node && node[ dir ] ||
    1814 
    1815                                                                 // Fallback to seeking `elem` from the start
    1816                                                                 (diff = nodeIndex = 0) || start.pop()) ) {
    1817 
    1818                                                                 // When found, cache indexes on `parent` and break
    1819                                                                 if ( node.nodeType === 1 && ++diff && node === elem ) {
    1820                                                                         uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
    1821                                                                         break;
    1822                                                                 }
    1823                                                         }
    1824 
    1825                                                 } else {
    1826                                                         // Use previously-cached element index if available
    1827                                                         if ( useCache ) {
    1828                                                                 // ...in a gzip-friendly way
    1829                                                                 node = elem;
    1830                                                                 outerCache = node[ expando ] || (node[ expando ] = {});
    1831 
    1832                                                                 // Support: IE <9 only
    1833                                                                 // Defend against cloned attroperties (jQuery gh-1709)
    1834                                                                 uniqueCache = outerCache[ node.uniqueID ] ||
    1835                                                                         (outerCache[ node.uniqueID ] = {});
    1836 
    1837                                                                 cache = uniqueCache[ type ] || [];
    1838                                                                 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
    1839                                                                 diff = nodeIndex;
    1840                                                         }
    1841 
    1842                                                         // xml :nth-child(...)
    1843                                                         // or :nth-last-child(...) or :nth(-last)?-of-type(...)
    1844                                                         if ( diff === false ) {
    1845                                                                 // Use the same loop as above to seek `elem` from the start
    1846                                                                 while ( (node = ++nodeIndex && node && node[ dir ] ||
    1847                                                                         (diff = nodeIndex = 0) || start.pop()) ) {
    1848 
    1849                                                                         if ( ( ofType ?
    1850                                                                                 node.nodeName.toLowerCase() === name :
    1851                                                                                 node.nodeType === 1 ) &&
    1852                                                                                 ++diff ) {
    1853 
    1854                                                                                 // Cache the index of each encountered element
    1855                                                                                 if ( useCache ) {
    1856                                                                                         outerCache = node[ expando ] || (node[ expando ] = {});
    1857 
    1858                                                                                         // Support: IE <9 only
    1859                                                                                         // Defend against cloned attroperties (jQuery gh-1709)
    1860                                                                                         uniqueCache = outerCache[ node.uniqueID ] ||
    1861                                                                                                 (outerCache[ node.uniqueID ] = {});
    1862 
    1863                                                                                         uniqueCache[ type ] = [ dirruns, diff ];
    1864                                                                                 }
    1865 
    1866                                                                                 if ( node === elem ) {
    1867                                                                                         break;
    1868                                                                                 }
    1869                                                                         }
    1870                                                                 }
    1871                                                         }
    1872                                                 }
    1873 
    1874                                                 // Incorporate the offset, then check against cycle size
    1875                                                 diff -= last;
    1876                                                 return diff === first || ( diff % first === 0 && diff / first >= 0 );
    1877                                         }
    1878                                 };
    1879                 },
    1880 
    1881                 "PSEUDO": function( pseudo, argument ) {
    1882                         // pseudo-class names are case-insensitive
    1883                         // http://www.w3.org/TR/selectors/#pseudo-classes
    1884                         // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
    1885                         // Remember that setFilters inherits from pseudos
    1886                         var args,
    1887                                 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
    1888                                         Sizzle.error( "unsupported pseudo: " + pseudo );
    1889 
    1890                         // The user may use createPseudo to indicate that
    1891                         // arguments are needed to create the filter function
    1892                         // just as Sizzle does
    1893                         if ( fn[ expando ] ) {
    1894                                 return fn( argument );
    1895                         }
    1896 
    1897                         // But maintain support for old signatures
    1898                         if ( fn.length > 1 ) {
    1899                                 args = [ pseudo, pseudo, "", argument ];
    1900                                 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
    1901                                         markFunction(function( seed, matches ) {
    1902                                                 var idx,
    1903                                                         matched = fn( seed, argument ),
    1904                                                         i = matched.length;
    1905                                                 while ( i-- ) {
    1906                                                         idx = indexOf( seed, matched[i] );
    1907                                                         seed[ idx ] = !( matches[ idx ] = matched[i] );
    1908                                                 }
    1909                                         }) :
    1910                                         function( elem ) {
    1911                                                 return fn( elem, 0, args );
    1912                                         };
    1913                         }
    1914 
    1915                         return fn;
    1916                 }
    1917         },
    1918 
    1919         pseudos: {
    1920                 // Potentially complex pseudos
    1921                 "not": markFunction(function( selector ) {
    1922                         // Trim the selector passed to compile
    1923                         // to avoid treating leading and trailing
    1924                         // spaces as combinators
    1925                         var input = [],
    1926                                 results = [],
    1927                                 matcher = compile( selector.replace( rtrim, "$1" ) );
    1928 
    1929                         return matcher[ expando ] ?
    1930                                 markFunction(function( seed, matches, context, xml ) {
    1931                                         var elem,
    1932                                                 unmatched = matcher( seed, null, xml, [] ),
    1933                                                 i = seed.length;
    1934 
    1935                                         // Match elements unmatched by `matcher`
    1936                                         while ( i-- ) {
    1937                                                 if ( (elem = unmatched[i]) ) {
    1938                                                         seed[i] = !(matches[i] = elem);
    1939                                                 }
    1940                                         }
    1941                                 }) :
    1942                                 function( elem, context, xml ) {
    1943                                         input[0] = elem;
    1944                                         matcher( input, null, xml, results );
    1945                                         // Don't keep the element (issue #299)
    1946                                         input[0] = null;
    1947                                         return !results.pop();
    1948                                 };
    1949                 }),
    1950 
    1951                 "has": markFunction(function( selector ) {
    1952                         return function( elem ) {
    1953                                 return Sizzle( selector, elem ).length > 0;
    1954                         };
    1955                 }),
    1956 
    1957                 "contains": markFunction(function( text ) {
    1958                         text = text.replace( runescape, funescape );
    1959                         return function( elem ) {
    1960                                 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
    1961                         };
    1962                 }),
    1963 
    1964                 // "Whether an element is represented by a :lang() selector
    1965                 // is based solely on the element's language value
    1966                 // being equal to the identifier C,
    1967                 // or beginning with the identifier C immediately followed by "-".
    1968                 // The matching of C against the element's language value is performed case-insensitively.
    1969                 // The identifier C does not have to be a valid language name."
    1970                 // http://www.w3.org/TR/selectors/#lang-pseudo
    1971                 "lang": markFunction( function( lang ) {
    1972                         // lang value must be a valid identifier
    1973                         if ( !ridentifier.test(lang || "") ) {
    1974                                 Sizzle.error( "unsupported lang: " + lang );
    1975                         }
    1976                         lang = lang.replace( runescape, funescape ).toLowerCase();
    1977                         return function( elem ) {
    1978                                 var elemLang;
    1979                                 do {
    1980                                         if ( (elemLang = documentIsHTML ?
    1981                                                 elem.lang :
    1982                                                 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
    1983 
    1984                                                 elemLang = elemLang.toLowerCase();
    1985                                                 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
    1986                                         }
    1987                                 } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
    1988                                 return false;
    1989                         };
    1990                 }),
    1991 
    1992                 // Miscellaneous
    1993                 "target": function( elem ) {
    1994                         var hash = window.location && window.location.hash;
    1995                         return hash && hash.slice( 1 ) === elem.id;
    1996                 },
    1997 
    1998                 "root": function( elem ) {
    1999                         return elem === docElem;
    2000                 },
    2001 
    2002                 "focus": function( elem ) {
    2003                         return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
    2004                 },
    2005 
    2006                 // Boolean properties
    2007                 "enabled": createDisabledPseudo( false ),
    2008                 "disabled": createDisabledPseudo( true ),
    2009 
    2010                 "checked": function( elem ) {
    2011                         // In CSS3, :checked should return both checked and selected elements
    2012                         // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
    2013                         var nodeName = elem.nodeName.toLowerCase();
    2014                         return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
    2015                 },
    2016 
    2017                 "selected": function( elem ) {
    2018                         // Accessing this property makes selected-by-default
    2019                         // options in Safari work properly
    2020                         if ( elem.parentNode ) {
    2021                                 elem.parentNode.selectedIndex;
    2022                         }
    2023 
    2024                         return elem.selected === true;
    2025                 },
    2026 
    2027                 // Contents
    2028                 "empty": function( elem ) {
    2029                         // http://www.w3.org/TR/selectors/#empty-pseudo
    2030                         // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
    2031                         //   but not by others (comment: 8; processing instruction: 7; etc.)
    2032                         // nodeType < 6 works because attributes (2) do not appear as children
    2033                         for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
    2034                                 if ( elem.nodeType < 6 ) {
    2035                                         return false;
    2036                                 }
    2037                         }
    2038                         return true;
    2039                 },
    2040 
    2041                 "parent": function( elem ) {
    2042                         return !Expr.pseudos["empty"]( elem );
    2043                 },
    2044 
    2045                 // Element/input types
    2046                 "header": function( elem ) {
    2047                         return rheader.test( elem.nodeName );
    2048                 },
    2049 
    2050                 "input": function( elem ) {
    2051                         return rinputs.test( elem.nodeName );
    2052                 },
    2053 
    2054                 "button": function( elem ) {
    2055                         var name = elem.nodeName.toLowerCase();
    2056                         return name === "input" && elem.type === "button" || name === "button";
    2057                 },
    2058 
    2059                 "text": function( elem ) {
    2060                         var attr;
    2061                         return elem.nodeName.toLowerCase() === "input" &&
    2062                                 elem.type === "text" &&
    2063 
    2064                                 // Support: IE<8
    2065                                 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
    2066                                 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
    2067                 },
    2068 
    2069                 // Position-in-collection
    2070                 "first": createPositionalPseudo(function() {
    2071                         return [ 0 ];
    2072                 }),
    2073 
    2074                 "last": createPositionalPseudo(function( matchIndexes, length ) {
    2075                         return [ length - 1 ];
    2076                 }),
    2077 
    2078                 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
    2079                         return [ argument < 0 ? argument + length : argument ];
    2080                 }),
    2081 
    2082                 "even": createPositionalPseudo(function( matchIndexes, length ) {
    2083                         var i = 0;
    2084                         for ( ; i < length; i += 2 ) {
    2085                                 matchIndexes.push( i );
    2086                         }
    2087                         return matchIndexes;
    2088                 }),
    2089 
    2090                 "odd": createPositionalPseudo(function( matchIndexes, length ) {
    2091                         var i = 1;
    2092                         for ( ; i < length; i += 2 ) {
    2093                                 matchIndexes.push( i );
    2094                         }
    2095                         return matchIndexes;
    2096                 }),
    2097 
    2098                 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
    2099                         var i = argument < 0 ? argument + length : argument;
    2100                         for ( ; --i >= 0; ) {
    2101                                 matchIndexes.push( i );
    2102                         }
    2103                         return matchIndexes;
    2104                 }),
    2105 
    2106                 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
    2107                         var i = argument < 0 ? argument + length : argument;
    2108                         for ( ; ++i < length; ) {
    2109                                 matchIndexes.push( i );
    2110                         }
    2111                         return matchIndexes;
    2112                 })
    2113         }
    2114 };
    2115 
    2116 Expr.pseudos["nth"] = Expr.pseudos["eq"];
    2117 
    2118 // Add button/input type pseudos
    2119 for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
    2120         Expr.pseudos[ i ] = createInputPseudo( i );
    2121 }
    2122 for ( i in { submit: true, reset: true } ) {
    2123         Expr.pseudos[ i ] = createButtonPseudo( i );
    2124 }
    2125 
    2126 // Easy API for creating new setFilters
    2127 function setFilters() {}
    2128 setFilters.prototype = Expr.filters = Expr.pseudos;
    2129 Expr.setFilters = new setFilters();
    2130 
    2131 tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
    2132         var matched, match, tokens, type,
    2133                 soFar, groups, preFilters,
    2134                 cached = tokenCache[ selector + " " ];
    2135 
    2136         if ( cached ) {
    2137                 return parseOnly ? 0 : cached.slice( 0 );
    2138         }
    2139 
    2140         soFar = selector;
    2141         groups = [];
    2142         preFilters = Expr.preFilter;
    2143 
    2144         while ( soFar ) {
    2145 
    2146                 // Comma and first run
    2147                 if ( !matched || (match = rcomma.exec( soFar )) ) {
    2148                         if ( match ) {
    2149                                 // Don't consume trailing commas as valid
    2150                                 soFar = soFar.slice( match[0].length ) || soFar;
    2151                         }
    2152                         groups.push( (tokens = []) );
    2153                 }
    2154 
    2155                 matched = false;
    2156 
    2157                 // Combinators
    2158                 if ( (match = rcombinators.exec( soFar )) ) {
    2159                         matched = match.shift();
    2160                         tokens.push({
    2161                                 value: matched,
    2162                                 // Cast descendant combinators to space
    2163                                 type: match[0].replace( rtrim, " " )
    2164                         });
    2165                         soFar = soFar.slice( matched.length );
    2166                 }
    2167 
    2168                 // Filters
    2169                 for ( type in Expr.filter ) {
    2170                         if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
    2171                                 (match = preFilters[ type ]( match ))) ) {
    2172                                 matched = match.shift();
    2173                                 tokens.push({
    2174                                         value: matched,
    2175                                         type: type,
    2176                                         matches: match
    2177                                 });
    2178                                 soFar = soFar.slice( matched.length );
    2179                         }
    2180                 }
    2181 
    2182                 if ( !matched ) {
    2183                         break;
    2184                 }
    2185         }
    2186 
    2187         // Return the length of the invalid excess
    2188         // if we're just parsing
    2189         // Otherwise, throw an error or return tokens
    2190         return parseOnly ?
    2191                 soFar.length :
    2192                 soFar ?
    2193                         Sizzle.error( selector ) :
    2194                         // Cache the tokens
    2195                         tokenCache( selector, groups ).slice( 0 );
    2196 };
    2197 
    2198 function toSelector( tokens ) {
    2199         var i = 0,
    2200                 len = tokens.length,
    2201                 selector = "";
    2202         for ( ; i < len; i++ ) {
    2203                 selector += tokens[i].value;
    2204         }
    2205         return selector;
    2206 }
    2207 
    2208 function addCombinator( matcher, combinator, base ) {
    2209         var dir = combinator.dir,
    2210                 skip = combinator.next,
    2211                 key = skip || dir,
    2212                 checkNonElements = base && key === "parentNode",
    2213                 doneName = done++;
    2214 
    2215         return combinator.first ?
    2216                 // Check against closest ancestor/preceding element
    2217                 function( elem, context, xml ) {
    2218                         while ( (elem = elem[ dir ]) ) {
    2219                                 if ( elem.nodeType === 1 || checkNonElements ) {
    2220                                         return matcher( elem, context, xml );
    2221                                 }
    2222                         }
    2223                         return false;
    2224                 } :
    2225 
    2226                 // Check against all ancestor/preceding elements
    2227                 function( elem, context, xml ) {
    2228                         var oldCache, uniqueCache, outerCache,
    2229                                 newCache = [ dirruns, doneName ];
    2230 
    2231                         // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
    2232                         if ( xml ) {
    2233                                 while ( (elem = elem[ dir ]) ) {
    2234                                         if ( elem.nodeType === 1 || checkNonElements ) {
    2235                                                 if ( matcher( elem, context, xml ) ) {
    2236                                                         return true;
    2237                                                 }
    2238                                         }
    2239                                 }
    2240                         } else {
    2241                                 while ( (elem = elem[ dir ]) ) {
    2242                                         if ( elem.nodeType === 1 || checkNonElements ) {
    2243                                                 outerCache = elem[ expando ] || (elem[ expando ] = {});
    2244 
    2245                                                 // Support: IE <9 only
    2246                                                 // Defend against cloned attroperties (jQuery gh-1709)
    2247                                                 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
    2248 
    2249                                                 if ( skip && skip === elem.nodeName.toLowerCase() ) {
    2250                                                         elem = elem[ dir ] || elem;
    2251                                                 } else if ( (oldCache = uniqueCache[ key ]) &&
    2252                                                         oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
    2253 
    2254                                                         // Assign to newCache so results back-propagate to previous elements
    2255                                                         return (newCache[ 2 ] = oldCache[ 2 ]);
    2256                                                 } else {
    2257                                                         // Reuse newcache so results back-propagate to previous elements
    2258                                                         uniqueCache[ key ] = newCache;
    2259 
    2260                                                         // A match means we're done; a fail means we have to keep checking
    2261                                                         if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
    2262                                                                 return true;
    2263                                                         }
    2264                                                 }
    2265                                         }
    2266                                 }
    2267                         }
    2268                         return false;
    2269                 };
    2270 }
    2271 
    2272 function elementMatcher( matchers ) {
    2273         return matchers.length > 1 ?
    2274                 function( elem, context, xml ) {
    2275                         var i = matchers.length;
    2276                         while ( i-- ) {
    2277                                 if ( !matchers[i]( elem, context, xml ) ) {
    2278                                         return false;
    2279                                 }
    2280                         }
    2281                         return true;
    2282                 } :
    2283                 matchers[0];
    2284 }
    2285 
    2286 function multipleContexts( selector, contexts, results ) {
    2287         var i = 0,
    2288                 len = contexts.length;
    2289         for ( ; i < len; i++ ) {
    2290                 Sizzle( selector, contexts[i], results );
    2291         }
    2292         return results;
    2293 }
    2294 
    2295 function condense( unmatched, map, filter, context, xml ) {
    2296         var elem,
    2297                 newUnmatched = [],
    2298                 i = 0,
    2299                 len = unmatched.length,
    2300                 mapped = map != null;
    2301 
    2302         for ( ; i < len; i++ ) {
    2303                 if ( (elem = unmatched[i]) ) {
    2304                         if ( !filter || filter( elem, context, xml ) ) {
    2305                                 newUnmatched.push( elem );
    2306                                 if ( mapped ) {
    2307                                         map.push( i );
    2308                                 }
    2309                         }
    2310                 }
    2311         }
    2312 
    2313         return newUnmatched;
    2314 }
    2315 
    2316 function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
    2317         if ( postFilter && !postFilter[ expando ] ) {
    2318                 postFilter = setMatcher( postFilter );
    2319         }
    2320         if ( postFinder && !postFinder[ expando ] ) {
    2321                 postFinder = setMatcher( postFinder, postSelector );
    2322         }
    2323         return markFunction(function( seed, results, context, xml ) {
    2324                 var temp, i, elem,
    2325                         preMap = [],
    2326                         postMap = [],
    2327                         preexisting = results.length,
    2328 
    2329                         // Get initial elements from seed or context
    2330                         elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
    2331 
    2332                         // Prefilter to get matcher input, preserving a map for seed-results synchronization
    2333                         matcherIn = preFilter && ( seed || !selector ) ?
    2334                                 condense( elems, preMap, preFilter, context, xml ) :
    2335                                 elems,
    2336 
    2337                         matcherOut = matcher ?
    2338                                 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
    2339                                 postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
    2340 
    2341                                         // ...intermediate processing is necessary
    2342                                         [] :
    2343 
    2344                                         // ...otherwise use results directly
    2345                                         results :
    2346                                 matcherIn;
    2347 
    2348                 // Find primary matches
    2349                 if ( matcher ) {
    2350                         matcher( matcherIn, matcherOut, context, xml );
    2351                 }
    2352 
    2353                 // Apply postFilter
    2354                 if ( postFilter ) {
    2355                         temp = condense( matcherOut, postMap );
    2356                         postFilter( temp, [], context, xml );
    2357 
    2358                         // Un-match failing elements by moving them back to matcherIn
    2359                         i = temp.length;
    2360                         while ( i-- ) {
    2361                                 if ( (elem = temp[i]) ) {
    2362                                         matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
    2363                                 }
    2364                         }
    2365                 }
    2366 
    2367                 if ( seed ) {
    2368                         if ( postFinder || preFilter ) {
    2369                                 if ( postFinder ) {
    2370                                         // Get the final matcherOut by condensing this intermediate into postFinder contexts
    2371                                         temp = [];
    2372                                         i = matcherOut.length;
    2373                                         while ( i-- ) {
    2374                                                 if ( (elem = matcherOut[i]) ) {
    2375                                                         // Restore matcherIn since elem is not yet a final match
    2376                                                         temp.push( (matcherIn[i] = elem) );
    2377                                                 }
    2378                                         }
    2379                                         postFinder( null, (matcherOut = []), temp, xml );
    2380                                 }
    2381 
    2382                                 // Move matched elements from seed to results to keep them synchronized
    2383                                 i = matcherOut.length;
    2384                                 while ( i-- ) {
    2385                                         if ( (elem = matcherOut[i]) &&
    2386                                                 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
    2387 
    2388                                                 seed[temp] = !(results[temp] = elem);
    2389                                         }
    2390                                 }
    2391                         }
    2392 
    2393                 // Add elements to results, through postFinder if defined
    2394                 } else {
    2395                         matcherOut = condense(
    2396                                 matcherOut === results ?
    2397                                         matcherOut.splice( preexisting, matcherOut.length ) :
    2398                                         matcherOut
    2399                         );
    2400                         if ( postFinder ) {
    2401                                 postFinder( null, results, matcherOut, xml );
    2402                         } else {
    2403                                 push.apply( results, matcherOut );
    2404                         }
    2405                 }
    2406         });
    2407 }
    2408 
    2409 function matcherFromTokens( tokens ) {
    2410         var checkContext, matcher, j,
    2411                 len = tokens.length,
    2412                 leadingRelative = Expr.relative[ tokens[0].type ],
    2413                 implicitRelative = leadingRelative || Expr.relative[" "],
    2414                 i = leadingRelative ? 1 : 0,
    2415 
    2416                 // The foundational matcher ensures that elements are reachable from top-level context(s)
    2417                 matchContext = addCombinator( function( elem ) {
    2418                         return elem === checkContext;
    2419                 }, implicitRelative, true ),
    2420                 matchAnyContext = addCombinator( function( elem ) {
    2421                         return indexOf( checkContext, elem ) > -1;
    2422                 }, implicitRelative, true ),
    2423                 matchers = [ function( elem, context, xml ) {
    2424                         var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
    2425                                 (checkContext = context).nodeType ?
    2426                                         matchContext( elem, context, xml ) :
    2427                                         matchAnyContext( elem, context, xml ) );
    2428                         // Avoid hanging onto element (issue #299)
    2429                         checkContext = null;
    2430                         return ret;
    2431                 } ];
    2432 
    2433         for ( ; i < len; i++ ) {
    2434                 if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
    2435                         matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
    2436                 } else {
    2437                         matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
    2438 
    2439                         // Return special upon seeing a positional matcher
    2440                         if ( matcher[ expando ] ) {
    2441                                 // Find the next relative operator (if any) for proper handling
    2442                                 j = ++i;
    2443                                 for ( ; j < len; j++ ) {
    2444                                         if ( Expr.relative[ tokens[j].type ] ) {
    2445                                                 break;
    2446                                         }
    2447                                 }
    2448                                 return setMatcher(
    2449                                         i > 1 && elementMatcher( matchers ),
    2450                                         i > 1 && toSelector(
    2451                                                 // If the preceding token was a descendant combinator, insert an implicit any-element `*`
    2452                                                 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
    2453                                         ).replace( rtrim, "$1" ),
    2454                                         matcher,
    2455                                         i < j && matcherFromTokens( tokens.slice( i, j ) ),
    2456                                         j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
    2457                                         j < len && toSelector( tokens )
    2458                                 );
    2459                         }
    2460                         matchers.push( matcher );
    2461                 }
    2462         }
    2463 
    2464         return elementMatcher( matchers );
    2465 }
    2466 
    2467 function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
    2468         var bySet = setMatchers.length > 0,
    2469                 byElement = elementMatchers.length > 0,
    2470                 superMatcher = function( seed, context, xml, results, outermost ) {
    2471                         var elem, j, matcher,
    2472                                 matchedCount = 0,
    2473                                 i = "0",
    2474                                 unmatched = seed && [],
    2475                                 setMatched = [],
    2476                                 contextBackup = outermostContext,
    2477                                 // We must always have either seed elements or outermost context
    2478                                 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
    2479                                 // Use integer dirruns iff this is the outermost matcher
    2480                                 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
    2481                                 len = elems.length;
    2482 
    2483                         if ( outermost ) {
    2484                                 outermostContext = context === document || context || outermost;
    2485                         }
    2486 
    2487                         // Add elements passing elementMatchers directly to results
    2488                         // Support: IE<9, Safari
    2489                         // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
    2490                         for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
    2491                                 if ( byElement && elem ) {
    2492                                         j = 0;
    2493                                         if ( !context && elem.ownerDocument !== document ) {
    2494                                                 setDocument( elem );
    2495                                                 xml = !documentIsHTML;
    2496                                         }
    2497                                         while ( (matcher = elementMatchers[j++]) ) {
    2498                                                 if ( matcher( elem, context || document, xml) ) {
    2499                                                         results.push( elem );
    2500                                                         break;
    2501                                                 }
    2502                                         }
    2503                                         if ( outermost ) {
    2504                                                 dirruns = dirrunsUnique;
    2505                                         }
    2506                                 }
    2507 
    2508                                 // Track unmatched elements for set filters
    2509                                 if ( bySet ) {
    2510                                         // They will have gone through all possible matchers
    2511                                         if ( (elem = !matcher && elem) ) {
    2512                                                 matchedCount--;
    2513                                         }
    2514 
    2515                                         // Lengthen the array for every element, matched or not
    2516                                         if ( seed ) {
    2517                                                 unmatched.push( elem );
    2518                                         }
    2519                                 }
    2520                         }
    2521 
    2522                         // `i` is now the count of elements visited above, and adding it to `matchedCount`
    2523                         // makes the latter nonnegative.
    2524                         matchedCount += i;
    2525 
    2526                         // Apply set filters to unmatched elements
    2527                         // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
    2528                         // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
    2529                         // no element matchers and no seed.
    2530                         // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
    2531                         // case, which will result in a "00" `matchedCount` that differs from `i` but is also
    2532                         // numerically zero.
    2533                         if ( bySet && i !== matchedCount ) {
    2534                                 j = 0;
    2535                                 while ( (matcher = setMatchers[j++]) ) {
    2536                                         matcher( unmatched, setMatched, context, xml );
    2537                                 }
    2538 
    2539                                 if ( seed ) {
    2540                                         // Reintegrate element matches to eliminate the need for sorting
    2541                                         if ( matchedCount > 0 ) {
    2542                                                 while ( i-- ) {
    2543                                                         if ( !(unmatched[i] || setMatched[i]) ) {
    2544                                                                 setMatched[i] = pop.call( results );
    2545                                                         }
    2546                                                 }
    2547                                         }
    2548 
    2549                                         // Discard index placeholder values to get only actual matches
    2550                                         setMatched = condense( setMatched );
    2551                                 }
    2552 
    2553                                 // Add matches to results
    2554                                 push.apply( results, setMatched );
    2555 
    2556                                 // Seedless set matches succeeding multiple successful matchers stipulate sorting
    2557                                 if ( outermost && !seed && setMatched.length > 0 &&
    2558                                         ( matchedCount + setMatchers.length ) > 1 ) {
    2559 
    2560                                         Sizzle.uniqueSort( results );
    2561                                 }
    2562                         }
    2563 
    2564                         // Override manipulation of globals by nested matchers
    2565                         if ( outermost ) {
    2566                                 dirruns = dirrunsUnique;
    2567                                 outermostContext = contextBackup;
    2568                         }
    2569 
    2570                         return unmatched;
    2571                 };
    2572 
    2573         return bySet ?
    2574                 markFunction( superMatcher ) :
    2575                 superMatcher;
    2576 }
    2577 
    2578 compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
    2579         var i,
    2580                 setMatchers = [],
    2581                 elementMatchers = [],
    2582                 cached = compilerCache[ selector + " " ];
    2583 
    2584         if ( !cached ) {
    2585                 // Generate a function of recursive functions that can be used to check each element
    2586                 if ( !match ) {
    2587                         match = tokenize( selector );
    2588                 }
    2589                 i = match.length;
    2590                 while ( i-- ) {
    2591                         cached = matcherFromTokens( match[i] );
    2592                         if ( cached[ expando ] ) {
    2593                                 setMatchers.push( cached );
    2594                         } else {
    2595                                 elementMatchers.push( cached );
    2596                         }
    2597                 }
    2598 
    2599                 // Cache the compiled function
    2600                 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
    2601 
    2602                 // Save selector and tokenization
    2603                 cached.selector = selector;
    2604         }
    2605         return cached;
    2606 };
    2607 
    2608 /**
    2609  * A low-level selection function that works with Sizzle's compiled
    2610  *  selector functions
    2611  * @param {String|Function} selector A selector or a pre-compiled
    2612  *  selector function built with Sizzle.compile
    2613  * @param {Element} context
    2614  * @param {Array} [results]
    2615  * @param {Array} [seed] A set of elements to match against
    2616  */
    2617 select = Sizzle.select = function( selector, context, results, seed ) {
    2618         var i, tokens, token, type, find,
    2619                 compiled = typeof selector === "function" && selector,
    2620                 match = !seed && tokenize( (selector = compiled.selector || selector) );
    2621 
    2622         results = results || [];
    2623 
    2624         // Try to minimize operations if there is only one selector in the list and no seed
    2625         // (the latter of which guarantees us context)
    2626         if ( match.length === 1 ) {
    2627 
    2628                 // Reduce context if the leading compound selector is an ID
    2629                 tokens = match[0] = match[0].slice( 0 );
    2630                 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
    2631                                 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
    2632 
    2633                         context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
    2634                         if ( !context ) {
    2635                                 return results;
    2636 
    2637                         // Precompiled matchers will still verify ancestry, so step up a level
    2638                         } else if ( compiled ) {
    2639                                 context = context.parentNode;
    2640                         }
    2641 
    2642                         selector = selector.slice( tokens.shift().value.length );
    2643                 }
    2644 
    2645                 // Fetch a seed set for right-to-left matching
    2646                 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
    2647                 while ( i-- ) {
    2648                         token = tokens[i];
    2649 
    2650                         // Abort if we hit a combinator
    2651                         if ( Expr.relative[ (type = token.type) ] ) {
    2652                                 break;
    2653                         }
    2654                         if ( (find = Expr.find[ type ]) ) {
    2655                                 // Search, expanding context for leading sibling combinators
    2656                                 if ( (seed = find(
    2657                                         token.matches[0].replace( runescape, funescape ),
    2658                                         rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
    2659                                 )) ) {
    2660 
    2661                                         // If seed is empty or no tokens remain, we can return early
    2662                                         tokens.splice( i, 1 );
    2663                                         selector = seed.length && toSelector( tokens );
    2664                                         if ( !selector ) {
    2665                                                 push.apply( results, seed );
    2666                                                 return results;
    2667                                         }
    2668 
    2669                                         break;
    2670                                 }
    2671                         }
    2672                 }
    2673         }
    2674 
    2675         // Compile and execute a filtering function if one is not provided
    2676         // Provide `match` to avoid retokenization if we modified the selector above
    2677         ( compiled || compile( selector, match ) )(
    2678                 seed,
    2679                 context,
    2680                 !documentIsHTML,
    2681                 results,
    2682                 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
    2683         );
    2684         return results;
    2685 };
    2686 
    2687 // One-time assignments
    2688 
    2689 // Sort stability
    2690 support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
    2691 
    2692 // Support: Chrome 14-35+
    2693 // Always assume duplicates if they aren't passed to the comparison function
    2694 support.detectDuplicates = !!hasDuplicate;
    2695 
    2696 // Initialize against the default document
    2697 setDocument();
    2698 
    2699 // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
    2700 // Detached nodes confoundingly follow *each other*
    2701 support.sortDetached = assert(function( el ) {
    2702         // Should return 1, but returns 4 (following)
    2703         return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
    2704 });
    2705 
    2706 // Support: IE<8
    2707 // Prevent attribute/property "interpolation"
    2708 // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
    2709 if ( !assert(function( el ) {
    2710         el.innerHTML = "<a href='#'></a>";
    2711         return el.firstChild.getAttribute("href") === "#" ;
    2712 }) ) {
    2713         addHandle( "type|href|height|width", function( elem, name, isXML ) {
    2714                 if ( !isXML ) {
    2715                         return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
    2716                 }
    2717         });
    2718 }
    2719 
    2720 // Support: IE<9
    2721 // Use defaultValue in place of getAttribute("value")
    2722 if ( !support.attributes || !assert(function( el ) {
    2723         el.innerHTML = "<input/>";
    2724         el.firstChild.setAttribute( "value", "" );
    2725         return el.firstChild.getAttribute( "value" ) === "";
    2726 }) ) {
    2727         addHandle( "value", function( elem, name, isXML ) {
    2728                 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
    2729                         return elem.defaultValue;
    2730                 }
    2731         });
    2732 }
    2733 
    2734 // Support: IE<9
    2735 // Use getAttributeNode to fetch booleans when getAttribute lies
    2736 if ( !assert(function( el ) {
    2737         return el.getAttribute("disabled") == null;
    2738 }) ) {
    2739         addHandle( booleans, function( elem, name, isXML ) {
    2740                 var val;
    2741                 if ( !isXML ) {
    2742                         return elem[ name ] === true ? name.toLowerCase() :
    2743                                         (val = elem.getAttributeNode( name )) && val.specified ?
    2744                                         val.value :
    2745                                 null;
    2746                 }
    2747         });
    2748 }
    2749 
    2750 return Sizzle;
    2751 
    2752 })( window );
    2753 
    2754 
    2755 
    2756 jQuery.find = Sizzle;
    2757 jQuery.expr = Sizzle.selectors;
    2758 
    2759 // Deprecated
    2760 jQuery.expr[ ":" ] = jQuery.expr.pseudos;
    2761 jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
    2762 jQuery.text = Sizzle.getText;
    2763 jQuery.isXMLDoc = Sizzle.isXML;
    2764 jQuery.contains = Sizzle.contains;
    2765 jQuery.escapeSelector = Sizzle.escape;
    2766 
    2767 
    2768 
    2769 
    2770 var dir = function( elem, dir, until ) {
    2771         var matched = [],
    2772                 truncate = until !== undefined;
    2773 
    2774         while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
    2775                 if ( elem.nodeType === 1 ) {
    2776                         if ( truncate && jQuery( elem ).is( until ) ) {
    2777                                 break;
    2778                         }
    2779                         matched.push( elem );
    2780                 }
    2781         }
    2782         return matched;
    2783 };
    2784 
    2785 
    2786 var siblings = function( n, elem ) {
    2787         var matched = [];
    2788 
    2789         for ( ; n; n = n.nextSibling ) {
    2790                 if ( n.nodeType === 1 && n !== elem ) {
    2791                         matched.push( n );
    2792                 }
    2793         }
    2794 
    2795         return matched;
    2796 };
    2797 
    2798 
    2799 var rneedsContext = jQuery.expr.match.needsContext;
    2800 
    2801 
    2802 
    2803 function nodeName( elem, name ) {
    2804 
    2805   return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
    2806 
    2807 };
    2808 var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
    2809 
    2810 
    2811 
    2812 // Implement the identical functionality for filter and not
    2813 function winnow( elements, qualifier, not ) {
    2814         if ( isFunction( qualifier ) ) {
    2815                 return jQuery.grep( elements, function( elem, i ) {
    2816                         return !!qualifier.call( elem, i, elem ) !== not;
    2817                 } );
    2818         }
    2819 
    2820         // Single element
    2821         if ( qualifier.nodeType ) {
    2822                 return jQuery.grep( elements, function( elem ) {
    2823                         return ( elem === qualifier ) !== not;
    2824                 } );
    2825         }
    2826 
    2827         // Arraylike of elements (jQuery, arguments, Array)
    2828         if ( typeof qualifier !== "string" ) {
    2829                 return jQuery.grep( elements, function( elem ) {
    2830                         return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
    2831                 } );
    2832         }
    2833 
    2834         // Filtered directly for both simple and complex selectors
    2835         return jQuery.filter( qualifier, elements, not );
    2836 }
    2837 
    2838 jQuery.filter = function( expr, elems, not ) {
    2839         var elem = elems[ 0 ];
    2840 
    2841         if ( not ) {
    2842                 expr = ":not(" + expr + ")";
    2843         }
    2844 
    2845         if ( elems.length === 1 && elem.nodeType === 1 ) {
    2846                 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
    2847         }
    2848 
    2849         return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
    2850                 return elem.nodeType === 1;
    2851         } ) );
    2852 };
    2853 
    2854 jQuery.fn.extend( {
    2855         find: function( selector ) {
    2856                 var i, ret,
    2857                         len = this.length,
    2858                         self = this;
    2859 
    2860                 if ( typeof selector !== "string" ) {
    2861                         return this.pushStack( jQuery( selector ).filter( function() {
    2862                                 for ( i = 0; i < len; i++ ) {
    2863                                         if ( jQuery.contains( self[ i ], this ) ) {
    2864                                                 return true;
    2865                                         }
    2866                                 }
    2867                         } ) );
    2868                 }
    2869 
    2870                 ret = this.pushStack( [] );
    2871 
    2872                 for ( i = 0; i < len; i++ ) {
    2873                         jQuery.find( selector, self[ i ], ret );
    2874                 }
    2875 
    2876                 return len > 1 ? jQuery.uniqueSort( ret ) : ret;
    2877         },
    2878         filter: function( selector ) {
    2879                 return this.pushStack( winnow( this, selector || [], false ) );
    2880         },
    2881         not: function( selector ) {
    2882                 return this.pushStack( winnow( this, selector || [], true ) );
    2883         },
    2884         is: function( selector ) {
    2885                 return !!winnow(
    2886                         this,
    2887 
    2888                         // If this is a positional/relative selector, check membership in the returned set
    2889                         // so $("p:first").is("p:last") won't return true for a doc with two "p".
    2890                         typeof selector === "string" && rneedsContext.test( selector ) ?
    2891                                 jQuery( selector ) :
    2892                                 selector || [],
    2893                         false
    2894                 ).length;
    2895         }
    2896 } );
    2897 
    2898 
    2899 // Initialize a jQuery object
    2900 
    2901 
    2902 // A central reference to the root jQuery(document)
    2903 var rootjQuery,
    2904 
    2905         // A simple way to check for HTML strings
    2906         // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
    2907         // Strict HTML recognition (#11290: must start with <)
    2908         // Shortcut simple #id case for speed
    2909         rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
    2910 
    2911         init = jQuery.fn.init = function( selector, context, root ) {
    2912                 var match, elem;
    2913 
    2914                 // HANDLE: $(""), $(null), $(undefined), $(false)
    2915                 if ( !selector ) {
    2916                         return this;
    2917                 }
    2918 
    2919                 // Method init() accepts an alternate rootjQuery
    2920                 // so migrate can support jQuery.sub (gh-2101)
    2921                 root = root || rootjQuery;
    2922 
    2923                 // Handle HTML strings
    2924                 if ( typeof selector === "string" ) {
    2925                         if ( selector[ 0 ] === "<" &&
    2926                                 selector[ selector.length - 1 ] === ">" &&
    2927                                 selector.length >= 3 ) {
    2928 
    2929                                 // Assume that strings that start and end with <> are HTML and skip the regex check
    2930                                 match = [ null, selector, null ];
    2931 
    2932                         } else {
    2933                                 match = rquickExpr.exec( selector );
    2934                         }
    2935 
    2936                         // Match html or make sure no context is specified for #id
    2937                         if ( match && ( match[ 1 ] || !context ) ) {
    2938 
    2939                                 // HANDLE: $(html) -> $(array)
    2940                                 if ( match[ 1 ] ) {
    2941                                         context = context instanceof jQuery ? context[ 0 ] : context;
    2942 
    2943                                         // Option to run scripts is true for back-compat
    2944                                         // Intentionally let the error be thrown if parseHTML is not present
    2945                                         jQuery.merge( this, jQuery.parseHTML(
    2946                                                 match[ 1 ],
    2947                                                 context && context.nodeType ? context.ownerDocument || context : document,
    2948                                                 true
    2949                                         ) );
    2950 
    2951                                         // HANDLE: $(html, props)
    2952                                         if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
    2953                                                 for ( match in context ) {
    2954 
    2955                                                         // Properties of context are called as methods if possible
    2956                                                         if ( isFunction( this[ match ] ) ) {
    2957                                                                 this[ match ]( context[ match ] );
    2958 
    2959                                                         // ...and otherwise set as attributes
    2960                                                         } else {
    2961                                                                 this.attr( match, context[ match ] );
    2962                                                         }
    2963                                                 }
    2964                                         }
    2965 
    2966                                         return this;
    2967 
    2968                                 // HANDLE: $(#id)
    2969                                 } else {
    2970                                         elem = document.getElementById( match[ 2 ] );
    2971 
    2972                                         if ( elem ) {
    2973 
    2974                                                 // Inject the element directly into the jQuery object
    2975                                                 this[ 0 ] = elem;
    2976                                                 this.length = 1;
    2977                                         }
    2978                                         return this;
    2979                                 }
    2980 
    2981                         // HANDLE: $(expr, $(...))
    2982                         } else if ( !context || context.jquery ) {
    2983                                 return ( context || root ).find( selector );
    2984 
    2985                         // HANDLE: $(expr, context)
    2986                         // (which is just equivalent to: $(context).find(expr)
    2987                         } else {
    2988                                 return this.constructor( context ).find( selector );
    2989                         }
    2990 
    2991                 // HANDLE: $(DOMElement)
    2992                 } else if ( selector.nodeType ) {
    2993                         this[ 0 ] = selector;
    2994                         this.length = 1;
    2995                         return this;
    2996 
    2997                 // HANDLE: $(function)
    2998                 // Shortcut for document ready
    2999                 } else if ( isFunction( selector ) ) {
    3000                         return root.ready !== undefined ?
    3001                                 root.ready( selector ) :
    3002 
    3003                                 // Execute immediately if ready is not present
    3004                                 selector( jQuery );
    3005                 }
    3006 
    3007                 return jQuery.makeArray( selector, this );
    3008         };
    3009 
    3010 // Give the init function the jQuery prototype for later instantiation
    3011 init.prototype = jQuery.fn;
    3012 
    3013 // Initialize central reference
    3014 rootjQuery = jQuery( document );
    3015 
    3016 
    3017 var rparentsprev = /^(?:parents|prev(?:Until|All))/,
    3018 
    3019         // Methods guaranteed to produce a unique set when starting from a unique set
    3020         guaranteedUnique = {
    3021                 children: true,
    3022                 contents: true,
    3023                 next: true,
    3024                 prev: true
    3025         };
    3026 
    3027 jQuery.fn.extend( {
    3028         has: function( target ) {
    3029                 var targets = jQuery( target, this ),
    3030                         l = targets.length;
    3031 
    3032                 return this.filter( function() {
    3033                         var i = 0;
    3034                         for ( ; i < l; i++ ) {
    3035                                 if ( jQuery.contains( this, targets[ i ] ) ) {
    3036                                         return true;
    3037                                 }
    3038                         }
    3039                 } );
    3040         },
    3041 
    3042         closest: function( selectors, context ) {
    3043                 var cur,
    3044                         i = 0,
    3045                         l = this.length,
    3046                         matched = [],
    3047                         targets = typeof selectors !== "string" && jQuery( selectors );
    3048 
    3049                 // Positional selectors never match, since there's no _selection_ context
    3050                 if ( !rneedsContext.test( selectors ) ) {
    3051                         for ( ; i < l; i++ ) {
    3052                                 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
    3053 
    3054                                         // Always skip document fragments
    3055                                         if ( cur.nodeType < 11 && ( targets ?
    3056                                                 targets.index( cur ) > -1 :
    3057 
    3058                                                 // Don't pass non-elements to Sizzle
    3059                                                 cur.nodeType === 1 &&
    3060                                                         jQuery.find.matchesSelector( cur, selectors ) ) ) {
    3061 
    3062                                                 matched.push( cur );
    3063                                                 break;
    3064                                         }
    3065                                 }
    3066                         }
    3067                 }
    3068 
    3069                 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
    3070         },
    3071 
    3072         // Determine the position of an element within the set
    3073         index: function( elem ) {
    3074 
    3075                 // No argument, return index in parent
    3076                 if ( !elem ) {
    3077                         return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
    3078                 }
    3079 
    3080                 // Index in selector
    3081                 if ( typeof elem === "string" ) {
    3082                         return indexOf.call( jQuery( elem ), this[ 0 ] );
    3083                 }
    3084 
    3085                 // Locate the position of the desired element
    3086                 return indexOf.call( this,
    3087 
    3088                         // If it receives a jQuery object, the first element is used
    3089                         elem.jquery ? elem[ 0 ] : elem
    3090                 );
    3091         },
    3092 
    3093         add: function( selector, context ) {
    3094                 return this.pushStack(
    3095                         jQuery.uniqueSort(
    3096                                 jQuery.merge( this.get(), jQuery( selector, context ) )
    3097                         )
    3098                 );
    3099         },
    3100 
    3101         addBack: function( selector ) {
    3102                 return this.add( selector == null ?
    3103                         this.prevObject : this.prevObject.filter( selector )
    3104                 );
    3105         }
    3106 } );
    3107 
    3108 function sibling( cur, dir ) {
    3109         while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
    3110         return cur;
    3111 }
    3112 
    3113 jQuery.each( {
    3114         parent: function( elem ) {
    3115                 var parent = elem.parentNode;
    3116                 return parent && parent.nodeType !== 11 ? parent : null;
    3117         },
    3118         parents: function( elem ) {
    3119                 return dir( elem, "parentNode" );
    3120         },
    3121         parentsUntil: function( elem, i, until ) {
    3122                 return dir( elem, "parentNode", until );
    3123         },
    3124         next: function( elem ) {
    3125                 return sibling( elem, "nextSibling" );
    3126         },
    3127         prev: function( elem ) {
    3128                 return sibling( elem, "previousSibling" );
    3129         },
    3130         nextAll: function( elem ) {
    3131                 return dir( elem, "nextSibling" );
    3132         },
    3133         prevAll: function( elem ) {
    3134                 return dir( elem, "previousSibling" );
    3135         },
    3136         nextUntil: function( elem, i, until ) {
    3137                 return dir( elem, "nextSibling", until );
    3138         },
    3139         prevUntil: function( elem, i, until ) {
    3140                 return dir( elem, "previousSibling", until );
    3141         },
    3142         siblings: function( elem ) {
    3143                 return siblings( ( elem.parentNode || {} ).firstChild, elem );
    3144         },
    3145         children: function( elem ) {
    3146                 return siblings( elem.firstChild );
    3147         },
    3148         contents: function( elem ) {
    3149         if ( nodeName( elem, "iframe" ) ) {
    3150             return elem.contentDocument;
    3151         }
    3152 
    3153         // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
    3154         // Treat the template element as a regular one in browsers that
    3155         // don't support it.
    3156         if ( nodeName( elem, "template" ) ) {
    3157             elem = elem.content || elem;
    3158         }
    3159 
    3160         return jQuery.merge( [], elem.childNodes );
    3161         }
    3162 }, function( name, fn ) {
    3163         jQuery.fn[ name ] = function( until, selector ) {
    3164                 var matched = jQuery.map( this, fn, until );
    3165 
    3166                 if ( name.slice( -5 ) !== "Until" ) {
    3167                         selector = until;
    3168                 }
    3169 
    3170                 if ( selector && typeof selector === "string" ) {
    3171                         matched = jQuery.filter( selector, matched );
    3172                 }
    3173 
    3174                 if ( this.length > 1 ) {
    3175 
    3176                         // Remove duplicates
    3177                         if ( !guaranteedUnique[ name ] ) {
    3178                                 jQuery.uniqueSort( matched );
    3179                         }
    3180 
    3181                         // Reverse order for parents* and prev-derivatives
    3182                         if ( rparentsprev.test( name ) ) {
    3183                                 matched.reverse();
    3184                         }
    3185                 }
    3186 
    3187                 return this.pushStack( matched );
    3188         };
    3189 } );
    3190 var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
    3191 
    3192 
    3193 
    3194 // Convert String-formatted options into Object-formatted ones
    3195 function createOptions( options ) {
    3196         var object = {};
    3197         jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
    3198                 object[ flag ] = true;
    3199         } );
    3200         return object;
    3201 }
    3202 
    3203 /*
    3204  * Create a callback list using the following parameters:
    3205  *
    3206  *      options: an optional list of space-separated options that will change how
    3207  *                      the callback list behaves or a more traditional option object
    3208  *
    3209  * By default a callback list will act like an event callback list and can be
    3210  * "fired" multiple times.
    3211  *
    3212  * Possible options:
    3213  *
    3214  *      once:                   will ensure the callback list can only be fired once (like a Deferred)
    3215  *
    3216  *      memory:                 will keep track of previous values and will call any callback added
    3217  *                                      after the list has been fired right away with the latest "memorized"
    3218  *                                      values (like a Deferred)
    3219  *
    3220  *      unique:                 will ensure a callback can only be added once (no duplicate in the list)
    3221  *
    3222  *      stopOnFalse:    interrupt callings when a callback returns false
    3223  *
    3224  */
    3225 jQuery.Callbacks = function( options ) {
    3226 
    3227         // Convert options from String-formatted to Object-formatted if needed
    3228         // (we check in cache first)
    3229         options = typeof options === "string" ?
    3230                 createOptions( options ) :
    3231                 jQuery.extend( {}, options );
    3232 
    3233         var // Flag to know if list is currently firing
    3234                 firing,
    3235 
    3236                 // Last fire value for non-forgettable lists
    3237                 memory,
    3238 
    3239                 // Flag to know if list was already fired
    3240                 fired,
    3241 
    3242                 // Flag to prevent firing
    3243                 locked,
    3244 
    3245                 // Actual callback list
    3246                 list = [],
    3247 
    3248                 // Queue of execution data for repeatable lists
    3249                 queue = [],
    3250 
    3251                 // Index of currently firing callback (modified by add/remove as needed)
    3252                 firingIndex = -1,
    3253 
    3254                 // Fire callbacks
    3255                 fire = function() {
    3256 
    3257                         // Enforce single-firing
    3258                         locked = locked || options.once;
    3259 
    3260                         // Execute callbacks for all pending executions,
    3261                         // respecting firingIndex overrides and runtime changes
    3262                         fired = firing = true;
    3263                         for ( ; queue.length; firingIndex = -1 ) {
    3264                                 memory = queue.shift();
    3265                                 while ( ++firingIndex < list.length ) {
    3266 
    3267                                         // Run callback and check for early termination
    3268                                         if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
    3269                                                 options.stopOnFalse ) {
    3270 
    3271                                                 // Jump to end and forget the data so .add doesn't re-fire
    3272                                                 firingIndex = list.length;
    3273                                                 memory = false;
    3274                                         }
    3275                                 }
    3276                         }
    3277 
    3278                         // Forget the data if we're done with it
    3279                         if ( !options.memory ) {
    3280                                 memory = false;
    3281                         }
    3282 
    3283                         firing = false;
    3284 
    3285                         // Clean up if we're done firing for good
    3286                         if ( locked ) {
    3287 
    3288                                 // Keep an empty list if we have data for future add calls
    3289                                 if ( memory ) {
    3290                                         list = [];
    3291 
    3292                                 // Otherwise, this object is spent
    3293                                 } else {
    3294                                         list = "";
    3295                                 }
    3296                         }
    3297                 },
    3298 
    3299                 // Actual Callbacks object
    3300                 self = {
    3301 
    3302                         // Add a callback or a collection of callbacks to the list
    3303                         add: function() {
    3304                                 if ( list ) {
    3305 
    3306                                         // If we have memory from a past run, we should fire after adding
    3307                                         if ( memory && !firing ) {
    3308                                                 firingIndex = list.length - 1;
    3309                                                 queue.push( memory );
    3310                                         }
    3311 
    3312                                         ( function add( args ) {
    3313                                                 jQuery.each( args, function( _, arg ) {
    3314                                                         if ( isFunction( arg ) ) {
    3315                                                                 if ( !options.unique || !self.has( arg ) ) {
    3316                                                                         list.push( arg );
    3317                                                                 }
    3318                                                         } else if ( arg && arg.length && toType( arg ) !== "string" ) {
    3319 
    3320                                                                 // Inspect recursively
    3321                                                                 add( arg );
    3322                                                         }
    3323                                                 } );
    3324                                         } )( arguments );
    3325 
    3326                                         if ( memory && !firing ) {
    3327                                                 fire();
    3328                                         }
    3329                                 }
    3330                                 return this;
    3331                         },
    3332 
    3333                         // Remove a callback from the list
    3334                         remove: function() {
    3335                                 jQuery.each( arguments, function( _, arg ) {
    3336                                         var index;
    3337                                         while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
    3338                                                 list.splice( index, 1 );
    3339 
    3340                                                 // Handle firing indexes
    3341                                                 if ( index <= firingIndex ) {
    3342                                                         firingIndex--;
    3343                                                 }
    3344                                         }
    3345                                 } );
    3346                                 return this;
    3347                         },
    3348 
    3349                         // Check if a given callback is in the list.
    3350                         // If no argument is given, return whether or not list has callbacks attached.
    3351                         has: function( fn ) {
    3352                                 return fn ?
    3353                                         jQuery.inArray( fn, list ) > -1 :
    3354                                         list.length > 0;
    3355                         },
    3356 
    3357                         // Remove all callbacks from the list
    3358                         empty: function() {
    3359                                 if ( list ) {
    3360                                         list = [];
    3361                                 }
    3362                                 return this;
    3363                         },
    3364 
    3365                         // Disable .fire and .add
    3366                         // Abort any current/pending executions
    3367                         // Clear all callbacks and values
    3368                         disable: function() {
    3369                                 locked = queue = [];
    3370                                 list = memory = "";
    3371                                 return this;
    3372                         },
    3373                         disabled: function() {
    3374                                 return !list;
    3375                         },
    3376 
    3377                         // Disable .fire
    3378                         // Also disable .add unless we have memory (since it would have no effect)
    3379                         // Abort any pending executions
    3380                         lock: function() {
    3381                                 locked = queue = [];
    3382                                 if ( !memory && !firing ) {
    3383                                         list = memory = "";
    3384                                 }
    3385                                 return this;
    3386                         },
    3387                         locked: function() {
    3388                                 return !!locked;
    3389                         },
    3390 
    3391                         // Call all callbacks with the given context and arguments
    3392                         fireWith: function( context, args ) {
    3393                                 if ( !locked ) {
    3394                                         args = args || [];
    3395                                         args = [ context, args.slice ? args.slice() : args ];
    3396                                         queue.push( args );
    3397                                         if ( !firing ) {
    3398                                                 fire();
    3399                                         }
    3400                                 }
    3401                                 return this;
    3402                         },
    3403 
    3404                         // Call all the callbacks with the given arguments
    3405                         fire: function() {
    3406                                 self.fireWith( this, arguments );
    3407                                 return this;
    3408                         },
    3409 
    3410                         // To know if the callbacks have already been called at least once
    3411                         fired: function() {
    3412                                 return !!fired;
    3413                         }
    3414                 };
    3415 
    3416         return self;
    3417 };
    3418 
    3419 
    3420 function Identity( v ) {
    3421         return v;
    3422 }
    3423 function Thrower( ex ) {
    3424         throw ex;
    3425 }
    3426 
    3427 function adoptValue( value, resolve, reject, noValue ) {
    3428         var method;
    3429 
    3430         try {
    3431 
    3432                 // Check for promise aspect first to privilege synchronous behavior
    3433                 if ( value && isFunction( ( method = value.promise ) ) ) {
    3434                         method.call( value ).done( resolve ).fail( reject );
    3435 
    3436                 // Other thenables
    3437                 } else if ( value && isFunction( ( method = value.then ) ) ) {
    3438                         method.call( value, resolve, reject );
    3439 
    3440                 // Other non-thenables
    3441                 } else {
    3442 
    3443                         // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
    3444                         // * false: [ value ].slice( 0 ) => resolve( value )
    3445                         // * true: [ value ].slice( 1 ) => resolve()
    3446                         resolve.apply( undefined, [ value ].slice( noValue ) );
    3447                 }
    3448 
    3449         // For Promises/A+, convert exceptions into rejections
    3450         // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
    3451         // Deferred#then to conditionally suppress rejection.
    3452         } catch ( value ) {
    3453 
    3454                 // Support: Android 4.0 only
    3455                 // Strict mode functions invoked without .call/.apply get global-object context
    3456                 reject.apply( undefined, [ value ] );
    3457         }
    3458 }
    3459 
    3460 jQuery.extend( {
    3461 
    3462         Deferred: function( func ) {
    3463                 var tuples = [
    3464 
    3465                                 // action, add listener, callbacks,
    3466                                 // ... .then handlers, argument index, [final state]
    3467                                 [ "notify", "progress", jQuery.Callbacks( "memory" ),
    3468                                         jQuery.Callbacks( "memory" ), 2 ],
    3469                                 [ "resolve", "done", jQuery.Callbacks( "once memory" ),
    3470                                         jQuery.Callbacks( "once memory" ), 0, "resolved" ],
    3471                                 [ "reject", "fail", jQuery.Callbacks( "once memory" ),
    3472                                         jQuery.Callbacks( "once memory" ), 1, "rejected" ]
    3473                         ],
    3474                         state = "pending",
    3475                         promise = {
    3476                                 state: function() {
    3477                                         return state;
    3478                                 },
    3479                                 always: function() {
    3480                                         deferred.done( arguments ).fail( arguments );
    3481                                         return this;
    3482                                 },
    3483                                 "catch": function( fn ) {
    3484                                         return promise.then( null, fn );
    3485                                 },
    3486 
    3487                                 // Keep pipe for back-compat
    3488                                 pipe: function( /* fnDone, fnFail, fnProgress */ ) {
    3489                                         var fns = arguments;
    3490 
    3491                                         return jQuery.Deferred( function( newDefer ) {
    3492                                                 jQuery.each( tuples, function( i, tuple ) {
    3493 
    3494                                                         // Map tuples (progress, done, fail) to arguments (done, fail, progress)
    3495                                                         var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
    3496 
    3497                                                         // deferred.progress(function() { bind to newDefer or newDefer.notify })
    3498                                                         // deferred.done(function() { bind to newDefer or newDefer.resolve })
    3499                                                         // deferred.fail(function() { bind to newDefer or newDefer.reject })
    3500                                                         deferred[ tuple[ 1 ] ]( function() {
    3501                                                                 var returned = fn && fn.apply( this, arguments );
    3502                                                                 if ( returned && isFunction( returned.promise ) ) {
    3503                                                                         returned.promise()
    3504                                                                                 .progress( newDefer.notify )
    3505                                                                                 .done( newDefer.resolve )
    3506                                                                                 .fail( newDefer.reject );
    3507                                                                 } else {
    3508                                                                         newDefer[ tuple[ 0 ] + "With" ](
    3509                                                                                 this,
    3510                                                                                 fn ? [ returned ] : arguments
    3511                                                                         );
    3512                                                                 }
    3513                                                         } );
    3514                                                 } );
    3515                                                 fns = null;
    3516                                         } ).promise();
    3517                                 },
    3518                                 then: function( onFulfilled, onRejected, onProgress ) {
    3519                                         var maxDepth = 0;
    3520                                         function resolve( depth, deferred, handler, special ) {
    3521                                                 return function() {
    3522                                                         var that = this,
    3523                                                                 args = arguments,
    3524                                                                 mightThrow = function() {
    3525                                                                         var returned, then;
    3526 
    3527                                                                         // Support: Promises/A+ section 2.3.3.3.3
    3528                                                                         // https://promisesaplus.com/#point-59
    3529                                                                         // Ignore double-resolution attempts
    3530                                                                         if ( depth < maxDepth ) {
    3531                                                                                 return;
    3532                                                                         }
    3533 
    3534                                                                         returned = handler.apply( that, args );
    3535 
    3536                                                                         // Support: Promises/A+ section 2.3.1
    3537                                                                         // https://promisesaplus.com/#point-48
    3538                                                                         if ( returned === deferred.promise() ) {
    3539                                                                                 throw new TypeError( "Thenable self-resolution" );
    3540                                                                         }
    3541 
    3542                                                                         // Support: Promises/A+ sections 2.3.3.1, 3.5
    3543                                                                         // https://promisesaplus.com/#point-54
    3544                                                                         // https://promisesaplus.com/#point-75
    3545                                                                         // Retrieve `then` only once
    3546                                                                         then = returned &&
    3547 
    3548                                                                                 // Support: Promises/A+ section 2.3.4
    3549                                                                                 // https://promisesaplus.com/#point-64
    3550                                                                                 // Only check objects and functions for thenability
    3551                                                                                 ( typeof returned === "object" ||
    3552                                                                                         typeof returned === "function" ) &&
    3553                                                                                 returned.then;
    3554 
    3555                                                                         // Handle a returned thenable
    3556                                                                         if ( isFunction( then ) ) {
    3557 
    3558                                                                                 // Special processors (notify) just wait for resolution
    3559                                                                                 if ( special ) {
    3560                                                                                         then.call(
    3561                                                                                                 returned,
    3562                                                                                                 resolve( maxDepth, deferred, Identity, special ),
    3563                                                                                                 resolve( maxDepth, deferred, Thrower, special )
    3564                                                                                         );
    3565 
    3566                                                                                 // Normal processors (resolve) also hook into progress
    3567                                                                                 } else {
    3568 
    3569                                                                                         // ...and disregard older resolution values
    3570                                                                                         maxDepth++;
    3571 
    3572                                                                                         then.call(
    3573                                                                                                 returned,
    3574                                                                                                 resolve( maxDepth, deferred, Identity, special ),
    3575                                                                                                 resolve( maxDepth, deferred, Thrower, special ),
    3576                                                                                                 resolve( maxDepth, deferred, Identity,
    3577                                                                                                         deferred.notifyWith )
    3578                                                                                         );
    3579                                                                                 }
    3580 
    3581                                                                         // Handle all other returned values
    3582                                                                         } else {
    3583 
    3584                                                                                 // Only substitute handlers pass on context
    3585                                                                                 // and multiple values (non-spec behavior)
    3586                                                                                 if ( handler !== Identity ) {
    3587                                                                                         that = undefined;
    3588                                                                                         args = [ returned ];
    3589                                                                                 }
    3590 
    3591                                                                                 // Process the value(s)
    3592                                                                                 // Default process is resolve
    3593                                                                                 ( special || deferred.resolveWith )( that, args );
    3594                                                                         }
    3595                                                                 },
    3596 
    3597                                                                 // Only normal processors (resolve) catch and reject exceptions
    3598                                                                 process = special ?
    3599                                                                         mightThrow :
    3600                                                                         function() {
    3601                                                                                 try {
    3602                                                                                         mightThrow();
    3603                                                                                 } catch ( e ) {
    3604 
    3605                                                                                         if ( jQuery.Deferred.exceptionHook ) {
    3606                                                                                                 jQuery.Deferred.exceptionHook( e,
    3607                                                                                                         process.stackTrace );
    3608                                                                                         }
    3609 
    3610                                                                                         // Support: Promises/A+ section 2.3.3.3.4.1
    3611                                                                                         // https://promisesaplus.com/#point-61
    3612                                                                                         // Ignore post-resolution exceptions
    3613                                                                                         if ( depth + 1 >= maxDepth ) {
    3614 
    3615                                                                                                 // Only substitute handlers pass on context
    3616                                                                                                 // and multiple values (non-spec behavior)
    3617                                                                                                 if ( handler !== Thrower ) {
    3618                                                                                                         that = undefined;
    3619                                                                                                         args = [ e ];
    3620                                                                                                 }
    3621 
    3622                                                                                                 deferred.rejectWith( that, args );
    3623                                                                                         }
    3624                                                                                 }
    3625                                                                         };
    3626 
    3627                                                         // Support: Promises/A+ section 2.3.3.3.1
    3628                                                         // https://promisesaplus.com/#point-57
    3629                                                         // Re-resolve promises immediately to dodge false rejection from
    3630                                                         // subsequent errors
    3631                                                         if ( depth ) {
    3632                                                                 process();
    3633                                                         } else {
    3634 
    3635                                                                 // Call an optional hook to record the stack, in case of exception
    3636                                                                 // since it's otherwise lost when execution goes async
    3637                                                                 if ( jQuery.Deferred.getStackHook ) {
    3638                                                                         process.stackTrace = jQuery.Deferred.getStackHook();
    3639                                                                 }
    3640                                                                 window.setTimeout( process );
    3641                                                         }
    3642                                                 };
    3643                                         }
    3644 
    3645                                         return jQuery.Deferred( function( newDefer ) {
    3646 
    3647                                                 // progress_handlers.add( ... )
    3648                                                 tuples[ 0 ][ 3 ].add(
    3649                                                         resolve(
    3650                                                                 0,
    3651                                                                 newDefer,
    3652                                                                 isFunction( onProgress ) ?
    3653                                                                         onProgress :
    3654                                                                         Identity,
    3655                                                                 newDefer.notifyWith
    3656                                                         )
    3657                                                 );
    3658 
    3659                                                 // fulfilled_handlers.add( ... )
    3660                                                 tuples[ 1 ][ 3 ].add(
    3661                                                         resolve(
    3662                                                                 0,
    3663                                                                 newDefer,
    3664                                                                 isFunction( onFulfilled ) ?
    3665                                                                         onFulfilled :
    3666                                                                         Identity
    3667                                                         )
    3668                                                 );
    3669 
    3670                                                 // rejected_handlers.add( ... )
    3671                                                 tuples[ 2 ][ 3 ].add(
    3672                                                         resolve(
    3673                                                                 0,
    3674                                                                 newDefer,
    3675                                                                 isFunction( onRejected ) ?
    3676                                                                         onRejected :
    3677                                                                         Thrower
    3678                                                         )
    3679                                                 );
    3680                                         } ).promise();
    3681                                 },
    3682 
    3683                                 // Get a promise for this deferred
    3684                                 // If obj is provided, the promise aspect is added to the object
    3685                                 promise: function( obj ) {
    3686                                         return obj != null ? jQuery.extend( obj, promise ) : promise;
    3687                                 }
    3688                         },
    3689                         deferred = {};
    3690 
    3691                 // Add list-specific methods
    3692                 jQuery.each( tuples, function( i, tuple ) {
    3693                         var list = tuple[ 2 ],
    3694                                 stateString = tuple[ 5 ];
    3695 
    3696                         // promise.progress = list.add
    3697                         // promise.done = list.add
    3698                         // promise.fail = list.add
    3699                         promise[ tuple[ 1 ] ] = list.add;
    3700 
    3701                         // Handle state
    3702                         if ( stateString ) {
    3703                                 list.add(
    3704                                         function() {
    3705 
    3706                                                 // state = "resolved" (i.e., fulfilled)
    3707                                                 // state = "rejected"
    3708                                                 state = stateString;
    3709                                         },
    3710 
    3711                                         // rejected_callbacks.disable
    3712                                         // fulfilled_callbacks.disable
    3713                                         tuples[ 3 - i ][ 2 ].disable,
    3714 
    3715                                         // rejected_handlers.disable
    3716                                         // fulfilled_handlers.disable
    3717                                         tuples[ 3 - i ][ 3 ].disable,
    3718 
    3719                                         // progress_callbacks.lock
    3720                                         tuples[ 0 ][ 2 ].lock,
    3721 
    3722                                         // progress_handlers.lock
    3723                                         tuples[ 0 ][ 3 ].lock
    3724                                 );
    3725                         }
    3726 
    3727                         // progress_handlers.fire
    3728                         // fulfilled_handlers.fire
    3729                         // rejected_handlers.fire
    3730                         list.add( tuple[ 3 ].fire );
    3731 
    3732                         // deferred.notify = function() { deferred.notifyWith(...) }
    3733                         // deferred.resolve = function() { deferred.resolveWith(...) }
    3734                         // deferred.reject = function() { deferred.rejectWith(...) }
    3735                         deferred[ tuple[ 0 ] ] = function() {
    3736                                 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
    3737                                 return this;
    3738                         };
    3739 
    3740                         // deferred.notifyWith = list.fireWith
    3741                         // deferred.resolveWith = list.fireWith
    3742                         // deferred.rejectWith = list.fireWith
    3743                         deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
    3744                 } );
    3745 
    3746                 // Make the deferred a promise
    3747                 promise.promise( deferred );
    3748 
    3749                 // Call given func if any
    3750                 if ( func ) {
    3751                         func.call( deferred, deferred );
    3752                 }
    3753 
    3754                 // All done!
    3755                 return deferred;
    3756         },
    3757 
    3758         // Deferred helper
    3759         when: function( singleValue ) {
    3760                 var
    3761 
    3762                         // count of uncompleted subordinates
    3763                         remaining = arguments.length,
    3764 
    3765                         // count of unprocessed arguments
    3766                         i = remaining,
    3767 
    3768                         // subordinate fulfillment data
    3769                         resolveContexts = Array( i ),
    3770                         resolveValues = slice.call( arguments ),
    3771 
    3772                         // the master Deferred
    3773                         master = jQuery.Deferred(),
    3774 
    3775                         // subordinate callback factory
    3776                         updateFunc = function( i ) {
    3777                                 return function( value ) {
    3778                                         resolveContexts[ i ] = this;
    3779                                         resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
    3780                                         if ( !( --remaining ) ) {
    3781                                                 master.resolveWith( resolveContexts, resolveValues );
    3782                                         }
    3783                                 };
    3784                         };
    3785 
    3786                 // Single- and empty arguments are adopted like Promise.resolve
    3787                 if ( remaining <= 1 ) {
    3788                         adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
    3789                                 !remaining );
    3790 
    3791                         // Use .then() to unwrap secondary thenables (cf. gh-3000)
    3792                         if ( master.state() === "pending" ||
    3793                                 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
    3794 
    3795                                 return master.then();
    3796                         }
    3797                 }
    3798 
    3799                 // Multiple arguments are aggregated like Promise.all array elements
    3800                 while ( i-- ) {
    3801                         adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
    3802                 }
    3803 
    3804                 return master.promise();
    3805         }
    3806 } );
    3807 
    3808 
    3809 // These usually indicate a programmer mistake during development,
    3810 // warn about them ASAP rather than swallowing them by default.
    3811 var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
    3812 
    3813 jQuery.Deferred.exceptionHook = function( error, stack ) {
    3814 
    3815         // Support: IE 8 - 9 only
    3816         // Console exists when dev tools are open, which can happen at any time
    3817         if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
    3818                 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
    3819         }
    3820 };
    3821 
    3822 
    3823 
    3824 
    3825 jQuery.readyException = function( error ) {
    3826         window.setTimeout( function() {
    3827                 throw error;
    3828         } );
    3829 };
    3830 
    3831 
    3832 
    3833 
    3834 // The deferred used on DOM ready
    3835 var readyList = jQuery.Deferred();
    3836 
    3837 jQuery.fn.ready = function( fn ) {
    3838 
    3839         readyList
    3840                 .then( fn )
    3841 
    3842                 // Wrap jQuery.readyException in a function so that the lookup
    3843                 // happens at the time of error handling instead of callback
    3844                 // registration.
    3845                 .catch( function( error ) {
    3846                         jQuery.readyException( error );
    3847                 } );
    3848 
    3849         return this;
    3850 };
    3851 
    3852 jQuery.extend( {
    3853 
    3854         // Is the DOM ready to be used? Set to true once it occurs.
    3855         isReady: false,
    3856 
    3857         // A counter to track how many items to wait for before
    3858         // the ready event fires. See #6781
    3859         readyWait: 1,
    3860 
    3861         // Handle when the DOM is ready
    3862         ready: function( wait ) {
    3863 
    3864                 // Abort if there are pending holds or we're already ready
    3865                 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
    3866                         return;
    3867                 }
    3868 
    3869                 // Remember that the DOM is ready
    3870                 jQuery.isReady = true;
    3871 
    3872                 // If a normal DOM Ready event fired, decrement, and wait if need be
    3873                 if ( wait !== true && --jQuery.readyWait > 0 ) {
    3874                         return;
    3875                 }
    3876 
    3877                 // If there are functions bound, to execute
    3878                 readyList.resolveWith( document, [ jQuery ] );
    3879         }
    3880 } );
    3881 
    3882 jQuery.ready.then = readyList.then;
    3883 
    3884 // The ready event handler and self cleanup method
    3885 function completed() {
    3886         document.removeEventListener( "DOMContentLoaded", completed );
    3887         window.removeEventListener( "load", completed );
    3888         jQuery.ready();
    3889 }
    3890 
    3891 // Catch cases where $(document).ready() is called
    3892 // after the browser event has already occurred.
    3893 // Support: IE <=9 - 10 only
    3894 // Older IE sometimes signals "interactive" too soon
    3895 if ( document.readyState === "complete" ||
    3896         ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
    3897 
    3898         // Handle it asynchronously to allow scripts the opportunity to delay ready
    3899         window.setTimeout( jQuery.ready );
    3900 
    3901 } else {
    3902 
    3903         // Use the handy event callback
    3904         document.addEventListener( "DOMContentLoaded", completed );
    3905 
    3906         // A fallback to window.onload, that will always work
    3907         window.addEventListener( "load", completed );
    3908 }
    3909 
    3910 
    3911 
    3912 
    3913 // Multifunctional method to get and set values of a collection
    3914 // The value/s can optionally be executed if it's a function
    3915 var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
    3916         var i = 0,
    3917                 len = elems.length,
    3918                 bulk = key == null;
    3919 
    3920         // Sets many values
    3921         if ( toType( key ) === "object" ) {
    3922                 chainable = true;
    3923                 for ( i in key ) {
    3924                         access( elems, fn, i, key[ i ], true, emptyGet, raw );
    3925                 }
    3926 
    3927         // Sets one value
    3928         } else if ( value !== undefined ) {
    3929                 chainable = true;
    3930 
    3931                 if ( !isFunction( value ) ) {
    3932                         raw = true;
    3933                 }
    3934 
    3935                 if ( bulk ) {
    3936 
    3937                         // Bulk operations run against the entire set
    3938                         if ( raw ) {
    3939                                 fn.call( elems, value );
    3940                                 fn = null;
    3941 
    3942                         // ...except when executing function values
    3943                         } else {
    3944                                 bulk = fn;
    3945                                 fn = function( elem, key, value ) {
    3946                                         return bulk.call( jQuery( elem ), value );
    3947                                 };
    3948                         }
    3949                 }
    3950 
    3951                 if ( fn ) {
    3952                         for ( ; i < len; i++ ) {
    3953                                 fn(
    3954                                         elems[ i ], key, raw ?
    3955                                         value :
    3956                                         value.call( elems[ i ], i, fn( elems[ i ], key ) )
    3957                                 );
    3958                         }
    3959                 }
    3960         }
    3961 
    3962         if ( chainable ) {
    3963                 return elems;
    3964         }
    3965 
    3966         // Gets
    3967         if ( bulk ) {
    3968                 return fn.call( elems );
    3969         }
    3970 
    3971         return len ? fn( elems[ 0 ], key ) : emptyGet;
    3972 };
    3973 
    3974 
    3975 // Matches dashed string for camelizing
    3976 var rmsPrefix = /^-ms-/,
    3977         rdashAlpha = /-([a-z])/g;
    3978 
    3979 // Used by camelCase as callback to replace()
    3980 function fcamelCase( all, letter ) {
    3981         return letter.toUpperCase();
    3982 }
    3983 
    3984 // Convert dashed to camelCase; used by the css and data modules
    3985 // Support: IE <=9 - 11, Edge 12 - 15
    3986 // Microsoft forgot to hump their vendor prefix (#9572)
    3987 function camelCase( string ) {
    3988         return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
    3989 }
    3990 var acceptData = function( owner ) {
    3991 
    3992         // Accepts only:
    3993         //  - Node
    3994         //    - Node.ELEMENT_NODE
    3995         //    - Node.DOCUMENT_NODE
    3996         //  - Object
    3997         //    - Any
    3998         return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
    3999 };
    4000 
    4001 
    4002 
    4003 
    4004 function Data() {
    4005         this.expando = jQuery.expando + Data.uid++;
    4006 }
    4007 
    4008 Data.uid = 1;
    4009 
    4010 Data.prototype = {
    4011 
    4012         cache: function( owner ) {
    4013 
    4014                 // Check if the owner object already has a cache
    4015                 var value = owner[ this.expando ];
    4016 
    4017                 // If not, create one
    4018                 if ( !value ) {
    4019                         value = {};
    4020 
    4021                         // We can accept data for non-element nodes in modern browsers,
    4022                         // but we should not, see #8335.
    4023                         // Always return an empty object.
    4024                         if ( acceptData( owner ) ) {
    4025 
    4026                                 // If it is a node unlikely to be stringify-ed or looped over
    4027                                 // use plain assignment
    4028                                 if ( owner.nodeType ) {
    4029                                         owner[ this.expando ] = value;
    4030 
    4031                                 // Otherwise secure it in a non-enumerable property
    4032                                 // configurable must be true to allow the property to be
    4033                                 // deleted when data is removed
    4034                                 } else {
    4035                                         Object.defineProperty( owner, this.expando, {
    4036                                                 value: value,
    4037                                                 configurable: true
    4038                                         } );
    4039                                 }
    4040                         }
    4041                 }
    4042 
    4043                 return value;
    4044         },
    4045         set: function( owner, data, value ) {
    4046                 var prop,
    4047                         cache = this.cache( owner );
    4048 
    4049                 // Handle: [ owner, key, value ] args
    4050                 // Always use camelCase key (gh-2257)
    4051                 if ( typeof data === "string" ) {
    4052                         cache[ camelCase( data ) ] = value;
    4053 
    4054                 // Handle: [ owner, { properties } ] args
    4055                 } else {
    4056 
    4057                         // Copy the properties one-by-one to the cache object
    4058                         for ( prop in data ) {
    4059                                 cache[ camelCase( prop ) ] = data[ prop ];
    4060                         }
    4061                 }
    4062                 return cache;
    4063         },
    4064         get: function( owner, key ) {
    4065                 return key === undefined ?
    4066                         this.cache( owner ) :
    4067 
    4068                         // Always use camelCase key (gh-2257)
    4069                         owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
    4070         },
    4071         access: function( owner, key, value ) {
    4072 
    4073                 // In cases where either:
    4074                 //
    4075                 //   1. No key was specified
    4076                 //   2. A string key was specified, but no value provided
    4077                 //
    4078                 // Take the "read" path and allow the get method to determine
    4079                 // which value to return, respectively either:
    4080                 //
    4081                 //   1. The entire cache object
    4082                 //   2. The data stored at the key
    4083                 //
    4084                 if ( key === undefined ||
    4085                                 ( ( key && typeof key === "string" ) && value === undefined ) ) {
    4086 
    4087                         return this.get( owner, key );
    4088                 }
    4089 
    4090                 // When the key is not a string, or both a key and value
    4091                 // are specified, set or extend (existing objects) with either:
    4092                 //
    4093                 //   1. An object of properties
    4094                 //   2. A key and value
    4095                 //
    4096                 this.set( owner, key, value );
    4097 
    4098                 // Since the "set" path can have two possible entry points
    4099                 // return the expected data based on which path was taken[*]
    4100                 return value !== undefined ? value : key;
    4101         },
    4102         remove: function( owner, key ) {
    4103                 var i,
    4104                         cache = owner[ this.expando ];
    4105 
    4106                 if ( cache === undefined ) {
    4107                         return;
    4108                 }
    4109 
    4110                 if ( key !== undefined ) {
    4111 
    4112                         // Support array or space separated string of keys
    4113                         if ( Array.isArray( key ) ) {
    4114 
    4115                                 // If key is an array of keys...
    4116                                 // We always set camelCase keys, so remove that.
    4117                                 key = key.map( camelCase );
    4118                         } else {
    4119                                 key = camelCase( key );
    4120 
    4121                                 // If a key with the spaces exists, use it.
    4122                                 // Otherwise, create an array by matching non-whitespace
    4123                                 key = key in cache ?
    4124                                         [ key ] :
    4125                                         ( key.match( rnothtmlwhite ) || [] );
    4126                         }
    4127 
    4128                         i = key.length;
    4129 
    4130                         while ( i-- ) {
    4131                                 delete cache[ key[ i ] ];
    4132                         }
    4133                 }
    4134 
    4135                 // Remove the expando if there's no more data
    4136                 if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
    4137 
    4138                         // Support: Chrome <=35 - 45
    4139                         // Webkit & Blink performance suffers when deleting properties
    4140                         // from DOM nodes, so set to undefined instead
    4141                         // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
    4142                         if ( owner.nodeType ) {
    4143                                 owner[ this.expando ] = undefined;
    4144                         } else {
    4145                                 delete owner[ this.expando ];
    4146                         }
    4147                 }
    4148         },
    4149         hasData: function( owner ) {
    4150                 var cache = owner[ this.expando ];
    4151                 return cache !== undefined && !jQuery.isEmptyObject( cache );
    4152         }
    4153 };
    4154 var dataPriv = new Data();
    4155 
    4156 var dataUser = new Data();
    4157 
    4158 
    4159 
    4160 //      Implementation Summary
    4161 //
    4162 //      1. Enforce API surface and semantic compatibility with 1.9.x branch
    4163 //      2. Improve the module's maintainability by reducing the storage
    4164 //              paths to a single mechanism.
    4165 //      3. Use the same single mechanism to support "private" and "user" data.
    4166 //      4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
    4167 //      5. Avoid exposing implementation details on user objects (eg. expando properties)
    4168 //      6. Provide a clear path for implementation upgrade to WeakMap in 2014
    4169 
    4170 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
    4171         rmultiDash = /[A-Z]/g;
    4172 
    4173 function getData( data ) {
    4174         if ( data === "true" ) {
    4175                 return true;
    4176         }
    4177 
    4178         if ( data === "false" ) {
    4179                 return false;
    4180         }
    4181 
    4182         if ( data === "null" ) {
    4183                 return null;
    4184         }
    4185 
    4186         // Only convert to a number if it doesn't change the string
    4187         if ( data === +data + "" ) {
    4188                 return +data;
    4189         }
    4190 
    4191         if ( rbrace.test( data ) ) {
    4192                 return JSON.parse( data );
    4193         }
    4194 
    4195         return data;
    4196 }
    4197 
    4198 function dataAttr( elem, key, data ) {
    4199         var name;
    4200 
    4201         // If nothing was found internally, try to fetch any
    4202         // data from the HTML5 data-* attribute
    4203         if ( data === undefined && elem.nodeType === 1 ) {
    4204                 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
    4205                 data = elem.getAttribute( name );
    4206 
    4207                 if ( typeof data === "string" ) {
    4208                         try {
    4209                                 data = getData( data );
    4210                         } catch ( e ) {}
    4211 
    4212                         // Make sure we set the data so it isn't changed later
    4213                         dataUser.set( elem, key, data );
    4214                 } else {
    4215                         data = undefined;
    4216                 }
    4217         }
    4218         return data;
    4219 }
    4220 
    4221 jQuery.extend( {
    4222         hasData: function( elem ) {
    4223                 return dataUser.hasData( elem ) || dataPriv.hasData( elem );
    4224         },
    4225 
    4226         data: function( elem, name, data ) {
    4227                 return dataUser.access( elem, name, data );
    4228         },
    4229 
    4230         removeData: function( elem, name ) {
    4231                 dataUser.remove( elem, name );
    4232         },
    4233 
    4234         // TODO: Now that all calls to _data and _removeData have been replaced
    4235         // with direct calls to dataPriv methods, these can be deprecated.
    4236         _data: function( elem, name, data ) {
    4237                 return dataPriv.access( elem, name, data );
    4238         },
    4239 
    4240         _removeData: function( elem, name ) {
    4241                 dataPriv.remove( elem, name );
    4242         }
    4243 } );
    4244 
    4245 jQuery.fn.extend( {
    4246         data: function( key, value ) {
    4247                 var i, name, data,
    4248                         elem = this[ 0 ],
    4249                         attrs = elem && elem.attributes;
    4250 
    4251                 // Gets all values
    4252                 if ( key === undefined ) {
    4253                         if ( this.length ) {
    4254                                 data = dataUser.get( elem );
    4255 
    4256                                 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
    4257                                         i = attrs.length;
    4258                                         while ( i-- ) {
    4259 
    4260                                                 // Support: IE 11 only
    4261                                                 // The attrs elements can be null (#14894)
    4262                                                 if ( attrs[ i ] ) {
    4263                                                         name = attrs[ i ].name;
    4264                                                         if ( name.indexOf( "data-" ) === 0 ) {
    4265                                                                 name = camelCase( name.slice( 5 ) );
    4266                                                                 dataAttr( elem, name, data[ name ] );
    4267                                                         }
    4268                                                 }
    4269                                         }
    4270                                         dataPriv.set( elem, "hasDataAttrs", true );
    4271                                 }
    4272                         }
    4273 
    4274                         return data;
    4275                 }
    4276 
    4277                 // Sets multiple values
    4278                 if ( typeof key === "object" ) {
    4279                         return this.each( function() {
    4280                                 dataUser.set( this, key );
    4281                         } );
    4282                 }
    4283 
    4284                 return access( this, function( value ) {
    4285                         var data;
    4286 
    4287                         // The calling jQuery object (element matches) is not empty
    4288                         // (and therefore has an element appears at this[ 0 ]) and the
    4289                         // `value` parameter was not undefined. An empty jQuery object
    4290                         // will result in `undefined` for elem = this[ 0 ] which will
    4291                         // throw an exception if an attempt to read a data cache is made.
    4292                         if ( elem && value === undefined ) {
    4293 
    4294                                 // Attempt to get data from the cache
    4295                                 // The key will always be camelCased in Data
    4296                                 data = dataUser.get( elem, key );
    4297                                 if ( data !== undefined ) {
    4298                                         return data;
    4299                                 }
    4300 
    4301                                 // Attempt to "discover" the data in
    4302                                 // HTML5 custom data-* attrs
    4303                                 data = dataAttr( elem, key );
    4304                                 if ( data !== undefined ) {
    4305                                         return data;
    4306                                 }
    4307 
    4308                                 // We tried really hard, but the data doesn't exist.
    4309                                 return;
    4310                         }
    4311 
    4312                         // Set the data...
    4313                         this.each( function() {
    4314 
    4315                                 // We always store the camelCased key
    4316                                 dataUser.set( this, key, value );
    4317                         } );
    4318                 }, null, value, arguments.length > 1, null, true );
    4319         },
    4320 
    4321         removeData: function( key ) {
    4322                 return this.each( function() {
    4323                         dataUser.remove( this, key );
    4324                 } );
    4325         }
    4326 } );
    4327 
    4328 
    4329 jQuery.extend( {
    4330         queue: function( elem, type, data ) {
    4331                 var queue;
    4332 
    4333                 if ( elem ) {
    4334                         type = ( type || "fx" ) + "queue";
    4335                         queue = dataPriv.get( elem, type );
    4336 
    4337                         // Speed up dequeue by getting out quickly if this is just a lookup
    4338                         if ( data ) {
    4339                                 if ( !queue || Array.isArray( data ) ) {
    4340                                         queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
    4341                                 } else {
    4342                                         queue.push( data );
    4343                                 }
    4344                         }
    4345                         return queue || [];
    4346                 }
    4347         },
    4348 
    4349         dequeue: function( elem, type ) {
    4350                 type = type || "fx";
    4351 
    4352                 var queue = jQuery.queue( elem, type ),
    4353                         startLength = queue.length,
    4354                         fn = queue.shift(),
    4355                         hooks = jQuery._queueHooks( elem, type ),
    4356                         next = function() {
    4357                                 jQuery.dequeue( elem, type );
    4358                         };
    4359 
    4360                 // If the fx queue is dequeued, always remove the progress sentinel
    4361                 if ( fn === "inprogress" ) {
    4362                         fn = queue.shift();
    4363                         startLength--;
    4364                 }
    4365 
    4366                 if ( fn ) {
    4367 
    4368                         // Add a progress sentinel to prevent the fx queue from being
    4369                         // automatically dequeued
    4370                         if ( type === "fx" ) {
    4371                                 queue.unshift( "inprogress" );
    4372                         }
    4373 
    4374                         // Clear up the last queue stop function
    4375                         delete hooks.stop;
    4376                         fn.call( elem, next, hooks );
    4377                 }
    4378 
    4379                 if ( !startLength && hooks ) {
    4380                         hooks.empty.fire();
    4381                 }
    4382         },
    4383 
    4384         // Not public - generate a queueHooks object, or return the current one
    4385         _queueHooks: function( elem, type ) {
    4386                 var key = type + "queueHooks";
    4387                 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
    4388                         empty: jQuery.Callbacks( "once memory" ).add( function() {
    4389                                 dataPriv.remove( elem, [ type + "queue", key ] );
    4390                         } )
    4391                 } );
    4392         }
    4393 } );
    4394 
    4395 jQuery.fn.extend( {
    4396         queue: function( type, data ) {
    4397                 var setter = 2;
    4398 
    4399                 if ( typeof type !== "string" ) {
    4400                         data = type;
    4401                         type = "fx";
    4402                         setter--;
    4403                 }
    4404 
    4405                 if ( arguments.length < setter ) {
    4406                         return jQuery.queue( this[ 0 ], type );
    4407                 }
    4408 
    4409                 return data === undefined ?
    4410                         this :
    4411                         this.each( function() {
    4412                                 var queue = jQuery.queue( this, type, data );
    4413 
    4414                                 // Ensure a hooks for this queue
    4415                                 jQuery._queueHooks( this, type );
    4416 
    4417                                 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
    4418                                         jQuery.dequeue( this, type );
    4419                                 }
    4420                         } );
    4421         },
    4422         dequeue: function( type ) {
    4423                 return this.each( function() {
    4424                         jQuery.dequeue( this, type );
    4425                 } );
    4426         },
    4427         clearQueue: function( type ) {
    4428                 return this.queue( type || "fx", [] );
    4429         },
    4430 
    4431         // Get a promise resolved when queues of a certain type
    4432         // are emptied (fx is the type by default)
    4433         promise: function( type, obj ) {
    4434                 var tmp,
    4435                         count = 1,
    4436                         defer = jQuery.Deferred(),
    4437                         elements = this,
    4438                         i = this.length,
    4439                         resolve = function() {
    4440                                 if ( !( --count ) ) {
    4441                                         defer.resolveWith( elements, [ elements ] );
    4442                                 }
    4443                         };
    4444 
    4445                 if ( typeof type !== "string" ) {
    4446                         obj = type;
    4447                         type = undefined;
    4448                 }
    4449                 type = type || "fx";
    4450 
    4451                 while ( i-- ) {
    4452                         tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
    4453                         if ( tmp && tmp.empty ) {
    4454                                 count++;
    4455                                 tmp.empty.add( resolve );
    4456                         }
    4457                 }
    4458                 resolve();
    4459                 return defer.promise( obj );
    4460         }
    4461 } );
    4462 var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
    4463 
    4464 var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
    4465 
    4466 
    4467 var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
    4468 
    4469 var isHiddenWithinTree = function( elem, el ) {
    4470 
    4471                 // isHiddenWithinTree might be called from jQuery#filter function;
    4472                 // in that case, element will be second argument
    4473                 elem = el || elem;
    4474 
    4475                 // Inline style trumps all
    4476                 return elem.style.display === "none" ||
    4477                         elem.style.display === "" &&
    4478 
    4479                         // Otherwise, check computed style
    4480                         // Support: Firefox <=43 - 45
    4481                         // Disconnected elements can have computed display: none, so first confirm that elem is
    4482                         // in the document.
    4483                         jQuery.contains( elem.ownerDocument, elem ) &&
    4484 
    4485                         jQuery.css( elem, "display" ) === "none";
    4486         };
    4487 
    4488 var swap = function( elem, options, callback, args ) {
    4489         var ret, name,
    4490                 old = {};
    4491 
    4492         // Remember the old values, and insert the new ones
    4493         for ( name in options ) {
    4494                 old[ name ] = elem.style[ name ];
    4495                 elem.style[ name ] = options[ name ];
    4496         }
    4497 
    4498         ret = callback.apply( elem, args || [] );
    4499 
    4500         // Revert the old values
    4501         for ( name in options ) {
    4502                 elem.style[ name ] = old[ name ];
    4503         }
    4504 
    4505         return ret;
    4506 };
    4507 
    4508 
    4509 
    4510 
    4511 function adjustCSS( elem, prop, valueParts, tween ) {
    4512         var adjusted, scale,
    4513                 maxIterations = 20,
    4514                 currentValue = tween ?
    4515                         function() {
    4516                                 return tween.cur();
    4517                         } :
    4518                         function() {
    4519                                 return jQuery.css( elem, prop, "" );
    4520                         },
    4521                 initial = currentValue(),
    4522                 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
    4523 
    4524                 // Starting value computation is required for potential unit mismatches
    4525                 initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
    4526                         rcssNum.exec( jQuery.css( elem, prop ) );
    4527 
    4528         if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
    4529 
    4530                 // Support: Firefox <=54
    4531                 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
    4532                 initial = initial / 2;
    4533 
    4534                 // Trust units reported by jQuery.css
    4535                 unit = unit || initialInUnit[ 3 ];
    4536 
    4537                 // Iteratively approximate from a nonzero starting point
    4538                 initialInUnit = +initial || 1;
    4539 
    4540                 while ( maxIterations-- ) {
    4541 
    4542                         // Evaluate and update our best guess (doubling guesses that zero out).
    4543                         // Finish if the scale equals or crosses 1 (making the old*new product non-positive).
    4544                         jQuery.style( elem, prop, initialInUnit + unit );
    4545                         if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
    4546                                 maxIterations = 0;
    4547                         }
    4548                         initialInUnit = initialInUnit / scale;
    4549 
    4550                 }
    4551 
    4552                 initialInUnit = initialInUnit * 2;
    4553                 jQuery.style( elem, prop, initialInUnit + unit );
    4554 
    4555                 // Make sure we update the tween properties later on
    4556                 valueParts = valueParts || [];
    4557         }
    4558 
    4559         if ( valueParts ) {
    4560                 initialInUnit = +initialInUnit || +initial || 0;
    4561 
    4562                 // Apply relative offset (+=/-=) if specified
    4563                 adjusted = valueParts[ 1 ] ?
    4564                         initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
    4565                         +valueParts[ 2 ];
    4566                 if ( tween ) {
    4567                         tween.unit = unit;
    4568                         tween.start = initialInUnit;
    4569                         tween.end = adjusted;
    4570                 }
    4571         }
    4572         return adjusted;
    4573 }
    4574 
    4575 
    4576 var defaultDisplayMap = {};
    4577 
    4578 function getDefaultDisplay( elem ) {
    4579         var temp,
    4580                 doc = elem.ownerDocument,
    4581                 nodeName = elem.nodeName,
    4582                 display = defaultDisplayMap[ nodeName ];
    4583 
    4584         if ( display ) {
    4585                 return display;
    4586         }
    4587 
    4588         temp = doc.body.appendChild( doc.createElement( nodeName ) );
    4589         display = jQuery.css( temp, "display" );
    4590 
    4591         temp.parentNode.removeChild( temp );
    4592 
    4593         if ( display === "none" ) {
    4594                 display = "block";
    4595         }
    4596         defaultDisplayMap[ nodeName ] = display;
    4597 
    4598         return display;
    4599 }
    4600 
    4601 function showHide( elements, show ) {
    4602         var display, elem,
    4603                 values = [],
    4604                 index = 0,
    4605                 length = elements.length;
    4606 
    4607         // Determine new display value for elements that need to change
    4608         for ( ; index < length; index++ ) {
    4609                 elem = elements[ index ];
    4610                 if ( !elem.style ) {
    4611                         continue;
    4612                 }
    4613 
    4614                 display = elem.style.display;
    4615                 if ( show ) {
    4616 
    4617                         // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
    4618                         // check is required in this first loop unless we have a nonempty display value (either
    4619                         // inline or about-to-be-restored)
    4620                         if ( display === "none" ) {
    4621                                 values[ index ] = dataPriv.get( elem, "display" ) || null;
    4622                                 if ( !values[ index ] ) {
    4623                                         elem.style.display = "";
    4624                                 }
    4625                         }
    4626                         if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
    4627                                 values[ index ] = getDefaultDisplay( elem );
    4628                         }
    4629                 } else {
    4630                         if ( display !== "none" ) {
    4631                                 values[ index ] = "none";
    4632 
    4633                                 // Remember what we're overwriting
    4634                                 dataPriv.set( elem, "display", display );
    4635                         }
    4636                 }
    4637         }
    4638 
    4639         // Set the display of the elements in a second loop to avoid constant reflow
    4640         for ( index = 0; index < length; index++ ) {
    4641                 if ( values[ index ] != null ) {
    4642                         elements[ index ].style.display = values[ index ];
    4643                 }
    4644         }
    4645 
    4646         return elements;
    4647 }
    4648 
    4649 jQuery.fn.extend( {
    4650         show: function() {
    4651                 return showHide( this, true );
    4652         },
    4653         hide: function() {
    4654                 return showHide( this );
    4655         },
    4656         toggle: function( state ) {
    4657                 if ( typeof state === "boolean" ) {
    4658                         return state ? this.show() : this.hide();
    4659                 }
    4660 
    4661                 return this.each( function() {
    4662                         if ( isHiddenWithinTree( this ) ) {
    4663                                 jQuery( this ).show();
    4664                         } else {
    4665                                 jQuery( this ).hide();
    4666                         }
    4667                 } );
    4668         }
    4669 } );
    4670 var rcheckableType = ( /^(?:checkbox|radio)$/i );
    4671 
    4672 var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
    4673 
    4674 var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
    4675 
    4676 
    4677 
    4678 // We have to close these tags to support XHTML (#13200)
    4679 var wrapMap = {
    4680 
    4681         // Support: IE <=9 only
    4682         option: [ 1, "<select multiple='multiple'>", "</select>" ],
    4683 
    4684         // XHTML parsers do not magically insert elements in the
    4685         // same way that tag soup parsers do. So we cannot shorten
    4686         // this by omitting <tbody> or other required elements.
    4687         thead: [ 1, "<table>", "</table>" ],
    4688         col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
    4689         tr: [ 2, "<table><tbody>", "</tbody></table>" ],
    4690         td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
    4691 
    4692         _default: [ 0, "", "" ]
    4693 };
    4694 
    4695 // Support: IE <=9 only
    4696 wrapMap.optgroup = wrapMap.option;
    4697 
    4698 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
    4699 wrapMap.th = wrapMap.td;
    4700 
    4701 
    4702 function getAll( context, tag ) {
    4703 
    4704         // Support: IE <=9 - 11 only
    4705         // Use typeof to avoid zero-argument method invocation on host objects (#15151)
    4706         var ret;
    4707 
    4708         if ( typeof context.getElementsByTagName !== "undefined" ) {
    4709                 ret = context.getElementsByTagName( tag || "*" );
    4710 
    4711         } else if ( typeof context.querySelectorAll !== "undefined" ) {
    4712                 ret = context.querySelectorAll( tag || "*" );
    4713 
    4714         } else {
    4715                 ret = [];
    4716         }
    4717 
    4718         if ( tag === undefined || tag && nodeName( context, tag ) ) {
    4719                 return jQuery.merge( [ context ], ret );
    4720         }
    4721 
    4722         return ret;
    4723 }
    4724 
    4725 
    4726 // Mark scripts as having already been evaluated
    4727 function setGlobalEval( elems, refElements ) {
    4728         var i = 0,
    4729                 l = elems.length;
    4730 
    4731         for ( ; i < l; i++ ) {
    4732                 dataPriv.set(
    4733                         elems[ i ],
    4734                         "globalEval",
    4735                         !refElements || dataPriv.get( refElements[ i ], "globalEval" )
    4736                 );
    4737         }
    4738 }
    4739 
    4740 
    4741 var rhtml = /<|&#?\w+;/;
    4742 
    4743 function buildFragment( elems, context, scripts, selection, ignored ) {
    4744         var elem, tmp, tag, wrap, contains, j,
    4745                 fragment = context.createDocumentFragment(),
    4746                 nodes = [],
    4747                 i = 0,
    4748                 l = elems.length;
    4749 
    4750         for ( ; i < l; i++ ) {
    4751                 elem = elems[ i ];
    4752 
    4753                 if ( elem || elem === 0 ) {
    4754 
    4755                         // Add nodes directly
    4756                         if ( toType( elem ) === "object" ) {
    4757 
    4758                                 // Support: Android <=4.0 only, PhantomJS 1 only
    4759                                 // push.apply(_, arraylike) throws on ancient WebKit
    4760                                 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
    4761 
    4762                         // Convert non-html into a text node
    4763                         } else if ( !rhtml.test( elem ) ) {
    4764                                 nodes.push( context.createTextNode( elem ) );
    4765 
    4766                         // Convert html into DOM nodes
    4767                         } else {
    4768                                 tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
    4769 
    4770                                 // Deserialize a standard representation
    4771                                 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
    4772                                 wrap = wrapMap[ tag ] || wrapMap._default;
    4773                                 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
    4774 
    4775                                 // Descend through wrappers to the right content
    4776                                 j = wrap[ 0 ];
    4777                                 while ( j-- ) {
    4778                                         tmp = tmp.lastChild;
    4779                                 }
    4780 
    4781                                 // Support: Android <=4.0 only, PhantomJS 1 only
    4782                                 // push.apply(_, arraylike) throws on ancient WebKit
    4783                                 jQuery.merge( nodes, tmp.childNodes );
    4784 
    4785                                 // Remember the top-level container
    4786                                 tmp = fragment.firstChild;
    4787 
    4788                                 // Ensure the created nodes are orphaned (#12392)
    4789                                 tmp.textContent = "";
    4790                         }
    4791                 }
    4792         }
    4793 
    4794         // Remove wrapper from fragment
    4795         fragment.textContent = "";
    4796 
    4797         i = 0;
    4798         while ( ( elem = nodes[ i++ ] ) ) {
    4799 
    4800                 // Skip elements already in the context collection (trac-4087)
    4801                 if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
    4802                         if ( ignored ) {
    4803                                 ignored.push( elem );
    4804                         }
    4805                         continue;
    4806                 }
    4807 
    4808                 contains = jQuery.contains( elem.ownerDocument, elem );
    4809 
    4810                 // Append to fragment
    4811                 tmp = getAll( fragment.appendChild( elem ), "script" );
    4812 
    4813                 // Preserve script evaluation history
    4814                 if ( contains ) {
    4815                         setGlobalEval( tmp );
    4816                 }
    4817 
    4818                 // Capture executables
    4819                 if ( scripts ) {
    4820                         j = 0;
    4821                         while ( ( elem = tmp[ j++ ] ) ) {
    4822                                 if ( rscriptType.test( elem.type || "" ) ) {
    4823                                         scripts.push( elem );
    4824                                 }
    4825                         }
    4826                 }
    4827         }
    4828 
    4829         return fragment;
    4830 }
    4831 
    4832 
    4833 ( function() {
    4834         var fragment = document.createDocumentFragment(),
    4835                 div = fragment.appendChild( document.createElement( "div" ) ),
    4836                 input = document.createElement( "input" );
    4837 
    4838         // Support: Android 4.0 - 4.3 only
    4839         // Check state lost if the name is set (#11217)
    4840         // Support: Windows Web Apps (WWA)
    4841         // `name` and `type` must use .setAttribute for WWA (#14901)
    4842         input.setAttribute( "type", "radio" );
    4843         input.setAttribute( "checked", "checked" );
    4844         input.setAttribute( "name", "t" );
    4845 
    4846         div.appendChild( input );
    4847 
    4848         // Support: Android <=4.1 only
    4849         // Older WebKit doesn't clone checked state correctly in fragments
    4850         support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
    4851 
    4852         // Support: IE <=11 only
    4853         // Make sure textarea (and checkbox) defaultValue is properly cloned
    4854         div.innerHTML = "<textarea>x</textarea>";
    4855         support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
    4856 } )();
    4857 var documentElement = document.documentElement;
    4858 
    4859 
    4860 
    4861 var
    4862         rkeyEvent = /^key/,
    4863         rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
    4864         rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
    4865 
    4866 function returnTrue() {
    4867         return true;
    4868 }
    4869 
    4870 function returnFalse() {
    4871         return false;
    4872 }
    4873 
    4874 // Support: IE <=9 only
    4875 // See #13393 for more info
    4876 function safeActiveElement() {
    4877         try {
    4878                 return document.activeElement;
    4879         } catch ( err ) { }
    4880 }
    4881 
    4882 function on( elem, types, selector, data, fn, one ) {
    4883         var origFn, type;
    4884 
    4885         // Types can be a map of types/handlers
    4886         if ( typeof types === "object" ) {
    4887 
    4888                 // ( types-Object, selector, data )
    4889                 if ( typeof selector !== "string" ) {
    4890 
    4891                         // ( types-Object, data )
    4892                         data = data || selector;
    4893                         selector = undefined;
    4894                 }
    4895                 for ( type in types ) {
    4896                         on( elem, type, selector, data, types[ type ], one );
    4897                 }
    4898                 return elem;
    4899         }
    4900 
    4901         if ( data == null && fn == null ) {
    4902 
    4903                 // ( types, fn )
    4904                 fn = selector;
    4905                 data = selector = undefined;
    4906         } else if ( fn == null ) {
    4907                 if ( typeof selector === "string" ) {
    4908 
    4909                         // ( types, selector, fn )
    4910                         fn = data;
    4911                         data = undefined;
    4912                 } else {
    4913 
    4914                         // ( types, data, fn )
    4915                         fn = data;
    4916                         data = selector;
    4917                         selector = undefined;
    4918                 }
    4919         }
    4920         if ( fn === false ) {
    4921                 fn = returnFalse;
    4922         } else if ( !fn ) {
    4923                 return elem;
    4924         }
    4925 
    4926         if ( one === 1 ) {
    4927                 origFn = fn;
    4928                 fn = function( event ) {
    4929 
    4930                         // Can use an empty set, since event contains the info
    4931                         jQuery().off( event );
    4932                         return origFn.apply( this, arguments );
    4933                 };
    4934 
    4935                 // Use same guid so caller can remove using origFn
    4936                 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
    4937         }
    4938         return elem.each( function() {
    4939                 jQuery.event.add( this, types, fn, data, selector );
    4940         } );
    4941 }
    4942 
    4943 /*
    4944  * Helper functions for managing events -- not part of the public interface.
    4945  * Props to Dean Edwards' addEvent library for many of the ideas.
    4946  */
    4947 jQuery.event = {
    4948 
    4949         global: {},
    4950 
    4951         add: function( elem, types, handler, data, selector ) {
    4952 
    4953                 var handleObjIn, eventHandle, tmp,
    4954                         events, t, handleObj,
    4955                         special, handlers, type, namespaces, origType,
    4956                         elemData = dataPriv.get( elem );
    4957 
    4958                 // Don't attach events to noData or text/comment nodes (but allow plain objects)
    4959                 if ( !elemData ) {
    4960                         return;
    4961                 }
    4962 
    4963                 // Caller can pass in an object of custom data in lieu of the handler
    4964                 if ( handler.handler ) {
    4965                         handleObjIn = handler;
    4966                         handler = handleObjIn.handler;
    4967                         selector = handleObjIn.selector;
    4968                 }
    4969 
    4970                 // Ensure that invalid selectors throw exceptions at attach time
    4971                 // Evaluate against documentElement in case elem is a non-element node (e.g., document)
    4972                 if ( selector ) {
    4973                         jQuery.find.matchesSelector( documentElement, selector );
    4974                 }
    4975 
    4976                 // Make sure that the handler has a unique ID, used to find/remove it later
    4977                 if ( !handler.guid ) {
    4978                         handler.guid = jQuery.guid++;
    4979                 }
    4980 
    4981                 // Init the element's event structure and main handler, if this is the first
    4982                 if ( !( events = elemData.events ) ) {
    4983                         events = elemData.events = {};
    4984                 }
    4985                 if ( !( eventHandle = elemData.handle ) ) {
    4986                         eventHandle = elemData.handle = function( e ) {
    4987 
    4988                                 // Discard the second event of a jQuery.event.trigger() and
    4989                                 // when an event is called after a page has unloaded
    4990                                 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
    4991                                         jQuery.event.dispatch.apply( elem, arguments ) : undefined;
    4992                         };
    4993                 }
    4994 
    4995                 // Handle multiple events separated by a space
    4996                 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
    4997                 t = types.length;
    4998                 while ( t-- ) {
    4999                         tmp = rtypenamespace.exec( types[ t ] ) || [];
    5000                         type = origType = tmp[ 1 ];
    5001                         namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
    5002 
    5003                         // There *must* be a type, no attaching namespace-only handlers
    5004                         if ( !type ) {
    5005                                 continue;
    5006                         }
    5007 
    5008                         // If event changes its type, use the special event handlers for the changed type
    5009                         special = jQuery.event.special[ type ] || {};
    5010 
    5011                         // If selector defined, determine special event api type, otherwise given type
    5012                         type = ( selector ? special.delegateType : special.bindType ) || type;
    5013 
    5014                         // Update special based on newly reset type
    5015                         special = jQuery.event.special[ type ] || {};
    5016 
    5017                         // handleObj is passed to all event handlers
    5018                         handleObj = jQuery.extend( {
    5019                                 type: type,
    5020                                 origType: origType,
    5021                                 data: data,
    5022                                 handler: handler,
    5023                                 guid: handler.guid,
    5024                                 selector: selector,
    5025                                 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
    5026                                 namespace: namespaces.join( "." )
    5027                         }, handleObjIn );
    5028 
    5029                         // Init the event handler queue if we're the first
    5030                         if ( !( handlers = events[ type ] ) ) {
    5031                                 handlers = events[ type ] = [];
    5032                                 handlers.delegateCount = 0;
    5033 
    5034                                 // Only use addEventListener if the special events handler returns false
    5035                                 if ( !special.setup ||
    5036                                         special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
    5037 
    5038                                         if ( elem.addEventListener ) {
    5039                                                 elem.addEventListener( type, eventHandle );
    5040                                         }
    5041                                 }
    5042                         }
    5043 
    5044                         if ( special.add ) {
    5045                                 special.add.call( elem, handleObj );
    5046 
    5047                                 if ( !handleObj.handler.guid ) {
    5048                                         handleObj.handler.guid = handler.guid;
    5049                                 }
    5050                         }
    5051 
    5052                         // Add to the element's handler list, delegates in front
    5053                         if ( selector ) {
    5054                                 handlers.splice( handlers.delegateCount++, 0, handleObj );
    5055                         } else {
    5056                                 handlers.push( handleObj );
    5057                         }
    5058 
    5059                         // Keep track of which events have ever been used, for event optimization
    5060                         jQuery.event.global[ type ] = true;
    5061                 }
    5062 
    5063         },
    5064 
    5065         // Detach an event or set of events from an element
    5066         remove: function( elem, types, handler, selector, mappedTypes ) {
    5067 
    5068                 var j, origCount, tmp,
    5069                         events, t, handleObj,
    5070                         special, handlers, type, namespaces, origType,
    5071                         elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
    5072 
    5073                 if ( !elemData || !( events = elemData.events ) ) {
    5074                         return;
    5075                 }
    5076 
    5077                 // Once for each type.namespace in types; type may be omitted
    5078                 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
    5079                 t = types.length;
    5080                 while ( t-- ) {
    5081                         tmp = rtypenamespace.exec( types[ t ] ) || [];
    5082                         type = origType = tmp[ 1 ];
    5083                         namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
    5084 
    5085                         // Unbind all events (on this namespace, if provided) for the element
    5086                         if ( !type ) {
    5087                                 for ( type in events ) {
    5088                                         jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
    5089                                 }
    5090                                 continue;
    5091                         }
    5092 
    5093                         special = jQuery.event.special[ type ] || {};
    5094                         type = ( selector ? special.delegateType : special.bindType ) || type;
    5095                         handlers = events[ type ] || [];
    5096                         tmp = tmp[ 2 ] &&
    5097                                 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
    5098 
    5099                         // Remove matching events
    5100                         origCount = j = handlers.length;
    5101                         while ( j-- ) {
    5102                                 handleObj = handlers[ j ];
    5103 
    5104                                 if ( ( mappedTypes || origType === handleObj.origType ) &&
    5105                                         ( !handler || handler.guid === handleObj.guid ) &&
    5106                                         ( !tmp || tmp.test( handleObj.namespace ) ) &&
    5107                                         ( !selector || selector === handleObj.selector ||
    5108                                                 selector === "**" && handleObj.selector ) ) {
    5109                                         handlers.splice( j, 1 );
    5110 
    5111                                         if ( handleObj.selector ) {
    5112                                                 handlers.delegateCount--;
    5113                                         }
    5114                                         if ( special.remove ) {
    5115                                                 special.remove.call( elem, handleObj );
    5116                                         }
    5117                                 }
    5118                         }
    5119 
    5120                         // Remove generic event handler if we removed something and no more handlers exist
    5121                         // (avoids potential for endless recursion during removal of special event handlers)
    5122                         if ( origCount && !handlers.length ) {
    5123                                 if ( !special.teardown ||
    5124                                         special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
    5125 
    5126                                         jQuery.removeEvent( elem, type, elemData.handle );
    5127                                 }
    5128 
    5129                                 delete events[ type ];
    5130                         }
    5131                 }
    5132 
    5133                 // Remove data and the expando if it's no longer used
    5134                 if ( jQuery.isEmptyObject( events ) ) {
    5135                         dataPriv.remove( elem, "handle events" );
    5136                 }
    5137         },
    5138 
    5139         dispatch: function( nativeEvent ) {
    5140 
    5141                 // Make a writable jQuery.Event from the native event object
    5142                 var event = jQuery.event.fix( nativeEvent );
    5143 
    5144                 var i, j, ret, matched, handleObj, handlerQueue,
    5145                         args = new Array( arguments.length ),
    5146                         handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
    5147                         special = jQuery.event.special[ event.type ] || {};
    5148 
    5149                 // Use the fix-ed jQuery.Event rather than the (read-only) native event
    5150                 args[ 0 ] = event;
    5151 
    5152                 for ( i = 1; i < arguments.length; i++ ) {
    5153                         args[ i ] = arguments[ i ];
    5154                 }
    5155 
    5156                 event.delegateTarget = this;
    5157 
    5158                 // Call the preDispatch hook for the mapped type, and let it bail if desired
    5159                 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
    5160                         return;
    5161                 }
    5162 
    5163                 // Determine handlers
    5164                 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
    5165 
    5166                 // Run delegates first; they may want to stop propagation beneath us
    5167                 i = 0;
    5168                 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
    5169                         event.currentTarget = matched.elem;
    5170 
    5171                         j = 0;
    5172                         while ( ( handleObj = matched.handlers[ j++ ] ) &&
    5173                                 !event.isImmediatePropagationStopped() ) {
    5174 
    5175                                 // Triggered event must either 1) have no namespace, or 2) have namespace(s)
    5176                                 // a subset or equal to those in the bound event (both can have no namespace).
    5177                                 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
    5178 
    5179                                         event.handleObj = handleObj;
    5180                                         event.data = handleObj.data;
    5181 
    5182                                         ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
    5183                                                 handleObj.handler ).apply( matched.elem, args );
    5184 
    5185                                         if ( ret !== undefined ) {
    5186                                                 if ( ( event.result = ret ) === false ) {
    5187                                                         event.preventDefault();
    5188                                                         event.stopPropagation();
    5189                                                 }
    5190                                         }
    5191                                 }
    5192                         }
    5193                 }
    5194 
    5195                 // Call the postDispatch hook for the mapped type
    5196                 if ( special.postDispatch ) {
    5197                         special.postDispatch.call( this, event );
    5198                 }
    5199 
    5200                 return event.result;
    5201         },
    5202 
    5203         handlers: function( event, handlers ) {
    5204                 var i, handleObj, sel, matchedHandlers, matchedSelectors,
    5205                         handlerQueue = [],
    5206                         delegateCount = handlers.delegateCount,
    5207                         cur = event.target;
    5208 
    5209                 // Find delegate handlers
    5210                 if ( delegateCount &&
    5211 
    5212                         // Support: IE <=9
    5213                         // Black-hole SVG <use> instance trees (trac-13180)
    5214                         cur.nodeType &&
    5215 
    5216                         // Support: Firefox <=42
    5217                         // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
    5218                         // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
    5219                         // Support: IE 11 only
    5220                         // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
    5221                         !( event.type === "click" && event.button >= 1 ) ) {
    5222 
    5223                         for ( ; cur !== this; cur = cur.parentNode || this ) {
    5224 
    5225                                 // Don't check non-elements (#13208)
    5226                                 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
    5227                                 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
    5228                                         matchedHandlers = [];
    5229                                         matchedSelectors = {};
    5230                                         for ( i = 0; i < delegateCount; i++ ) {
    5231                                                 handleObj = handlers[ i ];
    5232 
    5233                                                 // Don't conflict with Object.prototype properties (#13203)
    5234                                                 sel = handleObj.selector + " ";
    5235 
    5236                                                 if ( matchedSelectors[ sel ] === undefined ) {
    5237                                                         matchedSelectors[ sel ] = handleObj.needsContext ?
    5238                                                                 jQuery( sel, this ).index( cur ) > -1 :
    5239                                                                 jQuery.find( sel, this, null, [ cur ] ).length;
    5240                                                 }
    5241                                                 if ( matchedSelectors[ sel ] ) {
    5242                                                         matchedHandlers.push( handleObj );
    5243                                                 }
    5244                                         }
    5245                                         if ( matchedHandlers.length ) {
    5246                                                 handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
    5247                                         }
    5248                                 }
    5249                         }
    5250                 }
    5251 
    5252                 // Add the remaining (directly-bound) handlers
    5253                 cur = this;
    5254                 if ( delegateCount < handlers.length ) {
    5255                         handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
    5256                 }
    5257 
    5258                 return handlerQueue;
    5259         },
    5260 
    5261         addProp: function( name, hook ) {
    5262                 Object.defineProperty( jQuery.Event.prototype, name, {
    5263                         enumerable: true,
    5264                         configurable: true,
    5265 
    5266                         get: isFunction( hook ) ?
    5267                                 function() {
    5268                                         if ( this.originalEvent ) {
    5269                                                         return hook( this.originalEvent );
    5270                                         }
    5271                                 } :
    5272                                 function() {
    5273                                         if ( this.originalEvent ) {
    5274                                                         return this.originalEvent[ name ];
    5275                                         }
    5276                                 },
    5277 
    5278                         set: function( value ) {
    5279                                 Object.defineProperty( this, name, {
    5280                                         enumerable: true,
    5281                                         configurable: true,
    5282                                         writable: true,
    5283                                         value: value
    5284                                 } );
    5285                         }
    5286                 } );
    5287         },
    5288 
    5289         fix: function( originalEvent ) {
    5290                 return originalEvent[ jQuery.expando ] ?
    5291                         originalEvent :
    5292                         new jQuery.Event( originalEvent );
    5293         },
    5294 
    5295         special: {
    5296                 load: {
    5297 
    5298                         // Prevent triggered image.load events from bubbling to window.load
    5299                         noBubble: true
    5300                 },
    5301                 focus: {
    5302 
    5303                         // Fire native event if possible so blur/focus sequence is correct
    5304                         trigger: function() {
    5305                                 if ( this !== safeActiveElement() && this.focus ) {
    5306                                         this.focus();
    5307                                         return false;
    5308                                 }
    5309                         },
    5310                         delegateType: "focusin"
    5311                 },
    5312                 blur: {
    5313                         trigger: function() {
    5314                                 if ( this === safeActiveElement() && this.blur ) {
    5315                                         this.blur();
    5316                                         return false;
    5317                                 }
    5318                         },
    5319                         delegateType: "focusout"
    5320                 },
    5321                 click: {
    5322 
    5323                         // For checkbox, fire native event so checked state will be right
    5324                         trigger: function() {
    5325                                 if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
    5326                                         this.click();
    5327                                         return false;
    5328                                 }
    5329                         },
    5330 
    5331                         // For cross-browser consistency, don't fire native .click() on links
    5332                         _default: function( event ) {
    5333                                 return nodeName( event.target, "a" );
    5334                         }
    5335                 },
    5336 
    5337                 beforeunload: {
    5338                         postDispatch: function( event ) {
    5339 
    5340                                 // Support: Firefox 20+
    5341                                 // Firefox doesn't alert if the returnValue field is not set.
    5342                                 if ( event.result !== undefined && event.originalEvent ) {
    5343                                         event.originalEvent.returnValue = event.result;
    5344                                 }
    5345                         }
    5346                 }
    5347         }
    5348 };
    5349 
    5350 jQuery.removeEvent = function( elem, type, handle ) {
    5351 
    5352         // This "if" is needed for plain objects
    5353         if ( elem.removeEventListener ) {
    5354                 elem.removeEventListener( type, handle );
    5355         }
    5356 };
    5357 
    5358 jQuery.Event = function( src, props ) {
    5359 
    5360         // Allow instantiation without the 'new' keyword
    5361         if ( !( this instanceof jQuery.Event ) ) {
    5362                 return new jQuery.Event( src, props );
    5363         }
    5364 
    5365         // Event object
    5366         if ( src && src.type ) {
    5367                 this.originalEvent = src;
    5368                 this.type = src.type;
    5369 
    5370                 // Events bubbling up the document may have been marked as prevented
    5371                 // by a handler lower down the tree; reflect the correct value.
    5372                 this.isDefaultPrevented = src.defaultPrevented ||
    5373                                 src.defaultPrevented === undefined &&
    5374 
    5375                                 // Support: Android <=2.3 only
    5376                                 src.returnValue === false ?
    5377                         returnTrue :
    5378                         returnFalse;
    5379 
    5380                 // Create target properties
    5381                 // Support: Safari <=6 - 7 only
    5382                 // Target should not be a text node (#504, #13143)
    5383                 this.target = ( src.target && src.target.nodeType === 3 ) ?
    5384                         src.target.parentNode :
    5385                         src.target;
    5386 
    5387                 this.currentTarget = src.currentTarget;
    5388                 this.relatedTarget = src.relatedTarget;
    5389 
    5390         // Event type
    5391         } else {
    5392                 this.type = src;
    5393         }
    5394 
    5395         // Put explicitly provided properties onto the event object
    5396         if ( props ) {
    5397                 jQuery.extend( this, props );
    5398         }
    5399 
    5400         // Create a timestamp if incoming event doesn't have one
    5401         this.timeStamp = src && src.timeStamp || Date.now();
    5402 
    5403         // Mark it as fixed
    5404         this[ jQuery.expando ] = true;
    5405 };
    5406 
    5407 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
    5408 // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
    5409 jQuery.Event.prototype = {
    5410         constructor: jQuery.Event,
    5411         isDefaultPrevented: returnFalse,
    5412         isPropagationStopped: returnFalse,
    5413         isImmediatePropagationStopped: returnFalse,
    5414         isSimulated: false,
    5415 
    5416         preventDefault: function() {
    5417                 var e = this.originalEvent;
    5418 
    5419                 this.isDefaultPrevented = returnTrue;
    5420 
    5421                 if ( e && !this.isSimulated ) {
    5422                         e.preventDefault();
    5423                 }
    5424         },
    5425         stopPropagation: function() {
    5426                 var e = this.originalEvent;
    5427 
    5428                 this.isPropagationStopped = returnTrue;
    5429 
    5430                 if ( e && !this.isSimulated ) {
    5431                         e.stopPropagation();
    5432                 }
    5433         },
    5434         stopImmediatePropagation: function() {
    5435                 var e = this.originalEvent;
    5436 
    5437                 this.isImmediatePropagationStopped = returnTrue;
    5438 
    5439                 if ( e && !this.isSimulated ) {
    5440                         e.stopImmediatePropagation();
    5441                 }
    5442 
    5443                 this.stopPropagation();
    5444         }
    5445 };
    5446 
    5447 // Includes all common event props including KeyEvent and MouseEvent specific props
    5448 jQuery.each( {
    5449         altKey: true,
    5450         bubbles: true,
    5451         cancelable: true,
    5452         changedTouches: true,
    5453         ctrlKey: true,
    5454         detail: true,
    5455         eventPhase: true,
    5456         metaKey: true,
    5457         pageX: true,
    5458         pageY: true,
    5459         shiftKey: true,
    5460         view: true,
    5461         "char": true,
    5462         charCode: true,
    5463         key: true,
    5464         keyCode: true,
    5465         button: true,
    5466         buttons: true,
    5467         clientX: true,
    5468         clientY: true,
    5469         offsetX: true,
    5470         offsetY: true,
    5471         pointerId: true,
    5472         pointerType: true,
    5473         screenX: true,
    5474         screenY: true,
    5475         targetTouches: true,
    5476         toElement: true,
    5477         touches: true,
    5478 
    5479         which: function( event ) {
    5480                 var button = event.button;
    5481 
    5482                 // Add which for key events
    5483                 if ( event.which == null && rkeyEvent.test( event.type ) ) {
    5484                         return event.charCode != null ? event.charCode : event.keyCode;
    5485                 }
    5486 
    5487                 // Add which for click: 1 === left; 2 === middle; 3 === right
    5488                 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
    5489                         if ( button & 1 ) {
    5490                                 return 1;
    5491                         }
    5492 
    5493                         if ( button & 2 ) {
    5494                                 return 3;
    5495                         }
    5496 
    5497                         if ( button & 4 ) {
    5498                                 return 2;
    5499                         }
    5500 
    5501                         return 0;
    5502                 }
    5503 
    5504                 return event.which;
    5505         }
    5506 }, jQuery.event.addProp );
    5507 
    5508 // Create mouseenter/leave events using mouseover/out and event-time checks
    5509 // so that event delegation works in jQuery.
    5510 // Do the same for pointerenter/pointerleave and pointerover/pointerout
    5511 //
    5512 // Support: Safari 7 only
    5513 // Safari sends mouseenter too often; see:
    5514 // https://bugs.chromium.org/p/chromium/issues/detail?id=470258
    5515 // for the description of the bug (it existed in older Chrome versions as well).
    5516 jQuery.each( {
    5517         mouseenter: "mouseover",
    5518         mouseleave: "mouseout",
    5519         pointerenter: "pointerover",
    5520         pointerleave: "pointerout"
    5521 }, function( orig, fix ) {
    5522         jQuery.event.special[ orig ] = {
    5523                 delegateType: fix,
    5524                 bindType: fix,
    5525 
    5526                 handle: function( event ) {
    5527                         var ret,
    5528                                 target = this,
    5529                                 related = event.relatedTarget,
    5530                                 handleObj = event.handleObj;
    5531 
    5532                         // For mouseenter/leave call the handler if related is outside the target.
    5533                         // NB: No relatedTarget if the mouse left/entered the browser window
    5534                         if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
    5535                                 event.type = handleObj.origType;
    5536                                 ret = handleObj.handler.apply( this, arguments );
    5537                                 event.type = fix;
    5538                         }
    5539                         return ret;
    5540                 }
    5541         };
    5542 } );
    5543 
    5544 jQuery.fn.extend( {
    5545 
    5546         on: function( types, selector, data, fn ) {
    5547                 return on( this, types, selector, data, fn );
    5548         },
    5549         one: function( types, selector, data, fn ) {
    5550                 return on( this, types, selector, data, fn, 1 );
    5551         },
    5552         off: function( types, selector, fn ) {
    5553                 var handleObj, type;
    5554                 if ( types && types.preventDefault && types.handleObj ) {
    5555 
    5556                         // ( event )  dispatched jQuery.Event
    5557                         handleObj = types.handleObj;
    5558                         jQuery( types.delegateTarget ).off(
    5559                                 handleObj.namespace ?
    5560                                         handleObj.origType + "." + handleObj.namespace :
    5561                                         handleObj.origType,
    5562                                 handleObj.selector,
    5563                                 handleObj.handler
    5564                         );
    5565                         return this;
    5566                 }
    5567                 if ( typeof types === "object" ) {
    5568 
    5569                         // ( types-object [, selector] )
    5570                         for ( type in types ) {
    5571                                 this.off( type, selector, types[ type ] );
    5572                         }
    5573                         return this;
    5574                 }
    5575                 if ( selector === false || typeof selector === "function" ) {
    5576 
    5577                         // ( types [, fn] )
    5578                         fn = selector;
    5579                         selector = undefined;
    5580                 }
    5581                 if ( fn === false ) {
    5582                         fn = returnFalse;
    5583                 }
    5584                 return this.each( function() {
    5585                         jQuery.event.remove( this, types, fn, selector );
    5586                 } );
    5587         }
    5588 } );
    5589 
    5590 
    5591 var
    5592 
    5593         /* eslint-disable max-len */
    5594 
    5595         // See https://github.com/eslint/eslint/issues/3229
    5596         rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
    5597 
    5598         /* eslint-enable */
    5599 
    5600         // Support: IE <=10 - 11, Edge 12 - 13 only
    5601         // In IE/Edge using regex groups here causes severe slowdowns.
    5602         // See https://connect.microsoft.com/IE/feedback/details/1736512/
    5603         rnoInnerhtml = /<script|<style|<link/i,
    5604 
    5605         // checked="checked" or checked
    5606         rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
    5607         rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
    5608 
    5609 // Prefer a tbody over its parent table for containing new rows
    5610 function manipulationTarget( elem, content ) {
    5611         if ( nodeName( elem, "table" ) &&
    5612                 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
    5613 
    5614                 return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
    5615         }
    5616 
    5617         return elem;
    5618 }
    5619 
    5620 // Replace/restore the type attribute of script elements for safe DOM manipulation
    5621 function disableScript( elem ) {
    5622         elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
    5623         return elem;
    5624 }
    5625 function restoreScript( elem ) {
    5626         if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
    5627                 elem.type = elem.type.slice( 5 );
    5628         } else {
    5629                 elem.removeAttribute( "type" );
    5630         }
    5631 
    5632         return elem;
    5633 }
    5634 
    5635 function cloneCopyEvent( src, dest ) {
    5636         var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
    5637 
    5638         if ( dest.nodeType !== 1 ) {
    5639                 return;
    5640         }
    5641 
    5642         // 1. Copy private data: events, handlers, etc.
    5643         if ( dataPriv.hasData( src ) ) {
    5644                 pdataOld = dataPriv.access( src );
    5645                 pdataCur = dataPriv.set( dest, pdataOld );
    5646                 events = pdataOld.events;
    5647 
    5648                 if ( events ) {
    5649                         delete pdataCur.handle;
    5650                         pdataCur.events = {};
    5651 
    5652                         for ( type in events ) {
    5653                                 for ( i = 0, l = events[ type ].length; i < l; i++ ) {
    5654                                         jQuery.event.add( dest, type, events[ type ][ i ] );
    5655                                 }
    5656                         }
    5657                 }
    5658         }
    5659 
    5660         // 2. Copy user data
    5661         if ( dataUser.hasData( src ) ) {
    5662                 udataOld = dataUser.access( src );
    5663                 udataCur = jQuery.extend( {}, udataOld );
    5664 
    5665                 dataUser.set( dest, udataCur );
    5666         }
    5667 }
    5668 
    5669 // Fix IE bugs, see support tests
    5670 function fixInput( src, dest ) {
    5671         var nodeName = dest.nodeName.toLowerCase();
    5672 
    5673         // Fails to persist the checked state of a cloned checkbox or radio button.
    5674         if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
    5675                 dest.checked = src.checked;
    5676 
    5677         // Fails to return the selected option to the default selected state when cloning options
    5678         } else if ( nodeName === "input" || nodeName === "textarea" ) {
    5679                 dest.defaultValue = src.defaultValue;
    5680         }
    5681 }
    5682 
    5683 function domManip( collection, args, callback, ignored ) {
    5684 
    5685         // Flatten any nested arrays
    5686         args = concat.apply( [], args );
    5687 
    5688         var fragment, first, scripts, hasScripts, node, doc,
    5689                 i = 0,
    5690                 l = collection.length,
    5691                 iNoClone = l - 1,
    5692                 value = args[ 0 ],
    5693                 valueIsFunction = isFunction( value );
    5694 
    5695         // We can't cloneNode fragments that contain checked, in WebKit
    5696         if ( valueIsFunction ||
    5697                         ( l > 1 && typeof value === "string" &&
    5698                                 !support.checkClone && rchecked.test( value ) ) ) {
    5699                 return collection.each( function( index ) {
    5700                         var self = collection.eq( index );
    5701                         if ( valueIsFunction ) {
    5702                                 args[ 0 ] = value.call( this, index, self.html() );
    5703                         }
    5704                         domManip( self, args, callback, ignored );
    5705                 } );
    5706         }
    5707 
    5708         if ( l ) {
    5709                 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
    5710                 first = fragment.firstChild;
    5711 
    5712                 if ( fragment.childNodes.length === 1 ) {
    5713                         fragment = first;
    5714                 }
    5715 
    5716                 // Require either new content or an interest in ignored elements to invoke the callback
    5717                 if ( first || ignored ) {
    5718                         scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
    5719                         hasScripts = scripts.length;
    5720 
    5721                         // Use the original fragment for the last item
    5722                         // instead of the first because it can end up
    5723                         // being emptied incorrectly in certain situations (#8070).
    5724                         for ( ; i < l; i++ ) {
    5725                                 node = fragment;
    5726 
    5727                                 if ( i !== iNoClone ) {
    5728                                         node = jQuery.clone( node, true, true );
    5729 
    5730                                         // Keep references to cloned scripts for later restoration
    5731                                         if ( hasScripts ) {
    5732 
    5733                                                 // Support: Android <=4.0 only, PhantomJS 1 only
    5734                                                 // push.apply(_, arraylike) throws on ancient WebKit
    5735                                                 jQuery.merge( scripts, getAll( node, "script" ) );
    5736                                         }
    5737                                 }
    5738 
    5739                                 callback.call( collection[ i ], node, i );
    5740                         }
    5741 
    5742                         if ( hasScripts ) {
    5743                                 doc = scripts[ scripts.length - 1 ].ownerDocument;
    5744 
    5745                                 // Reenable scripts
    5746                                 jQuery.map( scripts, restoreScript );
    5747 
    5748                                 // Evaluate executable scripts on first document insertion
    5749                                 for ( i = 0; i < hasScripts; i++ ) {
    5750                                         node = scripts[ i ];
    5751                                         if ( rscriptType.test( node.type || "" ) &&
    5752                                                 !dataPriv.access( node, "globalEval" ) &&
    5753                                                 jQuery.contains( doc, node ) ) {
    5754 
    5755                                                 if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
    5756 
    5757                                                         // Optional AJAX dependency, but won't run scripts if not present
    5758                                                         if ( jQuery._evalUrl ) {
    5759                                                                 jQuery._evalUrl( node.src );
    5760                                                         }
    5761                                                 } else {
    5762                                                         DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node );
    5763                                                 }
    5764                                         }
    5765                                 }
    5766                         }
    5767                 }
    5768         }
    5769 
    5770         return collection;
    5771 }
    5772 
    5773 function remove( elem, selector, keepData ) {
    5774         var node,
    5775                 nodes = selector ? jQuery.filter( selector, elem ) : elem,
    5776                 i = 0;
    5777 
    5778         for ( ; ( node = nodes[ i ] ) != null; i++ ) {
    5779                 if ( !keepData && node.nodeType === 1 ) {
    5780                         jQuery.cleanData( getAll( node ) );
    5781                 }
    5782 
    5783                 if ( node.parentNode ) {
    5784                         if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
    5785                                 setGlobalEval( getAll( node, "script" ) );
    5786                         }
    5787                         node.parentNode.removeChild( node );
    5788                 }
    5789         }
    5790 
    5791         return elem;
    5792 }
    5793 
    5794 jQuery.extend( {
    5795         htmlPrefilter: function( html ) {
    5796                 return html.replace( rxhtmlTag, "<$1></$2>" );
    5797         },
    5798 
    5799         clone: function( elem, dataAndEvents, deepDataAndEvents ) {
    5800                 var i, l, srcElements, destElements,
    5801                         clone = elem.cloneNode( true ),
    5802                         inPage = jQuery.contains( elem.ownerDocument, elem );
    5803 
    5804                 // Fix IE cloning issues
    5805                 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
    5806                                 !jQuery.isXMLDoc( elem ) ) {
    5807 
    5808                         // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
    5809                         destElements = getAll( clone );
    5810                         srcElements = getAll( elem );
    5811 
    5812                         for ( i = 0, l = srcElements.length; i < l; i++ ) {
    5813                                 fixInput( srcElements[ i ], destElements[ i ] );
    5814                         }
    5815                 }
    5816 
    5817                 // Copy the events from the original to the clone
    5818                 if ( dataAndEvents ) {
    5819                         if ( deepDataAndEvents ) {
    5820                                 srcElements = srcElements || getAll( elem );
    5821                                 destElements = destElements || getAll( clone );
    5822 
    5823                                 for ( i = 0, l = srcElements.length; i < l; i++ ) {
    5824                                         cloneCopyEvent( srcElements[ i ], destElements[ i ] );
    5825                                 }
    5826                         } else {
    5827                                 cloneCopyEvent( elem, clone );
    5828                         }
    5829                 }
    5830 
    5831                 // Preserve script evaluation history
    5832                 destElements = getAll( clone, "script" );
    5833                 if ( destElements.length > 0 ) {
    5834                         setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
    5835                 }
    5836 
    5837                 // Return the cloned set
    5838                 return clone;
    5839         },
    5840 
    5841         cleanData: function( elems ) {
    5842                 var data, elem, type,
    5843                         special = jQuery.event.special,
    5844                         i = 0;
    5845 
    5846                 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
    5847                         if ( acceptData( elem ) ) {
    5848                                 if ( ( data = elem[ dataPriv.expando ] ) ) {
    5849                                         if ( data.events ) {
    5850                                                 for ( type in data.events ) {
    5851                                                         if ( special[ type ] ) {
    5852                                                                 jQuery.event.remove( elem, type );
    5853 
    5854                                                         // This is a shortcut to avoid jQuery.event.remove's overhead
    5855                                                         } else {
    5856                                                                 jQuery.removeEvent( elem, type, data.handle );
    5857                                                         }
    5858                                                 }
    5859                                         }
    5860 
    5861                                         // Support: Chrome <=35 - 45+
    5862                                         // Assign undefined instead of using delete, see Data#remove
    5863                                         elem[ dataPriv.expando ] = undefined;
    5864                                 }
    5865                                 if ( elem[ dataUser.expando ] ) {
    5866 
    5867                                         // Support: Chrome <=35 - 45+
    5868                                         // Assign undefined instead of using delete, see Data#remove
    5869                                         elem[ dataUser.expando ] = undefined;
    5870                                 }
    5871                         }
    5872                 }
    5873         }
    5874 } );
    5875 
    5876 jQuery.fn.extend( {
    5877         detach: function( selector ) {
    5878                 return remove( this, selector, true );
    5879         },
    5880 
    5881         remove: function( selector ) {
    5882                 return remove( this, selector );
    5883         },
    5884 
    5885         text: function( value ) {
    5886                 return access( this, function( value ) {
    5887                         return value === undefined ?
    5888                                 jQuery.text( this ) :
    5889                                 this.empty().each( function() {
    5890                                         if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
    5891                                                 this.textContent = value;
    5892                                         }
    5893                                 } );
    5894                 }, null, value, arguments.length );
    5895         },
    5896 
    5897         append: function() {
    5898                 return domManip( this, arguments, function( elem ) {
    5899                         if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
    5900                                 var target = manipulationTarget( this, elem );
    5901                                 target.appendChild( elem );
    5902                         }
    5903                 } );
    5904         },
    5905 
    5906         prepend: function() {
    5907                 return domManip( this, arguments, function( elem ) {
    5908                         if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
    5909                                 var target = manipulationTarget( this, elem );
    5910                                 target.insertBefore( elem, target.firstChild );
    5911                         }
    5912                 } );
    5913         },
    5914 
    5915         before: function() {
    5916                 return domManip( this, arguments, function( elem ) {
    5917                         if ( this.parentNode ) {
    5918                                 this.parentNode.insertBefore( elem, this );
    5919                         }
    5920                 } );
    5921         },
    5922 
    5923         after: function() {
    5924                 return domManip( this, arguments, function( elem ) {
    5925                         if ( this.parentNode ) {
    5926                                 this.parentNode.insertBefore( elem, this.nextSibling );
    5927                         }
    5928                 } );
    5929         },
    5930 
    5931         empty: function() {
    5932                 var elem,
    5933                         i = 0;
    5934 
    5935                 for ( ; ( elem = this[ i ] ) != null; i++ ) {
    5936                         if ( elem.nodeType === 1 ) {
    5937 
    5938                                 // Prevent memory leaks
    5939                                 jQuery.cleanData( getAll( elem, false ) );
    5940 
    5941                                 // Remove any remaining nodes
    5942                                 elem.textContent = "";
    5943                         }
    5944                 }
    5945 
    5946                 return this;
    5947         },
    5948 
    5949         clone: function( dataAndEvents, deepDataAndEvents ) {
    5950                 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
    5951                 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
    5952 
    5953                 return this.map( function() {
    5954                         return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
    5955                 } );
    5956         },
    5957 
    5958         html: function( value ) {
    5959                 return access( this, function( value ) {
    5960                         var elem = this[ 0 ] || {},
    5961                                 i = 0,
    5962                                 l = this.length;
    5963 
    5964                         if ( value === undefined && elem.nodeType === 1 ) {
    5965                                 return elem.innerHTML;
    5966                         }
    5967 
    5968                         // See if we can take a shortcut and just use innerHTML
    5969                         if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
    5970                                 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
    5971 
    5972                                 value = jQuery.htmlPrefilter( value );
    5973 
    5974                                 try {
    5975                                         for ( ; i < l; i++ ) {
    5976                                                 elem = this[ i ] || {};
    5977 
    5978                                                 // Remove element nodes and prevent memory leaks
    5979                                                 if ( elem.nodeType === 1 ) {
    5980                                                         jQuery.cleanData( getAll( elem, false ) );
    5981                                                         elem.innerHTML = value;
    5982                                                 }
    5983                                         }
    5984 
    5985                                         elem = 0;
    5986 
    5987                                 // If using innerHTML throws an exception, use the fallback method
    5988                                 } catch ( e ) {}
    5989                         }
    5990 
    5991                         if ( elem ) {
    5992                                 this.empty().append( value );
    5993                         }
    5994                 }, null, value, arguments.length );
    5995         },
    5996 
    5997         replaceWith: function() {
    5998                 var ignored = [];
    5999 
    6000                 // Make the changes, replacing each non-ignored context element with the new content
    6001                 return domManip( this, arguments, function( elem ) {
    6002                         var parent = this.parentNode;
    6003 
    6004                         if ( jQuery.inArray( this, ignored ) < 0 ) {
    6005                                 jQuery.cleanData( getAll( this ) );
    6006                                 if ( parent ) {
    6007                                         parent.replaceChild( elem, this );
    6008                                 }
    6009                         }
    6010 
    6011                 // Force callback invocation
    6012                 }, ignored );
    6013         }
    6014 } );
    6015 
    6016 jQuery.each( {
    6017         appendTo: "append",
    6018         prependTo: "prepend",
    6019         insertBefore: "before",
    6020         insertAfter: "after",
    6021         replaceAll: "replaceWith"
    6022 }, function( name, original ) {
    6023         jQuery.fn[ name ] = function( selector ) {
    6024                 var elems,
    6025                         ret = [],
    6026                         insert = jQuery( selector ),
    6027                         last = insert.length - 1,
    6028                         i = 0;
    6029 
    6030                 for ( ; i <= last; i++ ) {
    6031                         elems = i === last ? this : this.clone( true );
    6032                         jQuery( insert[ i ] )[ original ]( elems );
    6033 
    6034                         // Support: Android <=4.0 only, PhantomJS 1 only
    6035                         // .get() because push.apply(_, arraylike) throws on ancient WebKit
    6036                         push.apply( ret, elems.get() );
    6037                 }
    6038 
    6039                 return this.pushStack( ret );
    6040         };
    6041 } );
    6042 var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
    6043 
    6044 var getStyles = function( elem ) {
    6045 
    6046                 // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
    6047                 // IE throws on elements created in popups
    6048                 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
    6049                 var view = elem.ownerDocument.defaultView;
    6050 
    6051                 if ( !view || !view.opener ) {
    6052                         view = window;
    6053                 }
    6054 
    6055                 return view.getComputedStyle( elem );
    6056         };
    6057 
    6058 var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
    6059 
    6060 
    6061 
    6062 ( function() {
    6063 
    6064         // Executing both pixelPosition & boxSizingReliable tests require only one layout
    6065         // so they're executed at the same time to save the second computation.
    6066         function computeStyleTests() {
    6067 
    6068                 // This is a singleton, we need to execute it only once
    6069                 if ( !div ) {
    6070                         return;
    6071                 }
    6072 
    6073                 container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
    6074                         "margin-top:1px;padding:0;border:0";
    6075                 div.style.cssText =
    6076                         "position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
    6077                         "margin:auto;border:1px;padding:1px;" +
    6078                         "width:60%;top:1%";
    6079                 documentElement.appendChild( container ).appendChild( div );
    6080 
    6081                 var divStyle = window.getComputedStyle( div );
    6082                 pixelPositionVal = divStyle.top !== "1%";
    6083 
    6084                 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
    6085                 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
    6086 
    6087                 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
    6088                 // Some styles come back with percentage values, even though they shouldn't
    6089                 div.style.right = "60%";
    6090                 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
    6091 
    6092                 // Support: IE 9 - 11 only
    6093                 // Detect misreporting of content dimensions for box-sizing:border-box elements
    6094                 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
    6095 
    6096                 // Support: IE 9 only
    6097                 // Detect overflow:scroll screwiness (gh-3699)
    6098                 div.style.position = "absolute";
    6099                 scrollboxSizeVal = div.offsetWidth === 36 || "absolute";
    6100 
    6101                 documentElement.removeChild( container );
    6102 
    6103                 // Nullify the div so it wouldn't be stored in the memory and
    6104                 // it will also be a sign that checks already performed
    6105                 div = null;
    6106         }
    6107 
    6108         function roundPixelMeasures( measure ) {
    6109                 return Math.round( parseFloat( measure ) );
    6110         }
    6111 
    6112         var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
    6113                 reliableMarginLeftVal,
    6114                 container = document.createElement( "div" ),
    6115                 div = document.createElement( "div" );
    6116 
    6117         // Finish early in limited (non-browser) environments
    6118         if ( !div.style ) {
    6119                 return;
    6120         }
    6121 
    6122         // Support: IE <=9 - 11 only
    6123         // Style of cloned element affects source element cloned (#8908)
    6124         div.style.backgroundClip = "content-box";
    6125         div.cloneNode( true ).style.backgroundClip = "";
    6126         support.clearCloneStyle = div.style.backgroundClip === "content-box";
    6127 
    6128         jQuery.extend( support, {
    6129                 boxSizingReliable: function() {
    6130                         computeStyleTests();
    6131                         return boxSizingReliableVal;
    6132                 },
    6133                 pixelBoxStyles: function() {
    6134                         computeStyleTests();
    6135                         return pixelBoxStylesVal;
    6136                 },
    6137                 pixelPosition: function() {
    6138                         computeStyleTests();
    6139                         return pixelPositionVal;
    6140                 },
    6141                 reliableMarginLeft: function() {
    6142                         computeStyleTests();
    6143                         return reliableMarginLeftVal;
    6144                 },
    6145                 scrollboxSize: function() {
    6146                         computeStyleTests();
    6147                         return scrollboxSizeVal;
    6148                 }
    6149         } );
    6150 } )();
    6151 
    6152 
    6153 function curCSS( elem, name, computed ) {
    6154         var width, minWidth, maxWidth, ret,
    6155 
    6156                 // Support: Firefox 51+
    6157                 // Retrieving style before computed somehow
    6158                 // fixes an issue with getting wrong values
    6159                 // on detached elements
    6160                 style = elem.style;
    6161 
    6162         computed = computed || getStyles( elem );
    6163 
    6164         // getPropertyValue is needed for:
    6165         //   .css('filter') (IE 9 only, #12537)
    6166         //   .css('--customProperty) (#3144)
    6167         if ( computed ) {
    6168                 ret = computed.getPropertyValue( name ) || computed[ name ];
    6169 
    6170                 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
    6171                         ret = jQuery.style( elem, name );
    6172                 }
    6173 
    6174                 // A tribute to the "awesome hack by Dean Edwards"
    6175                 // Android Browser returns percentage for some values,
    6176                 // but width seems to be reliably pixels.
    6177                 // This is against the CSSOM draft spec:
    6178                 // https://drafts.csswg.org/cssom/#resolved-values
    6179                 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
    6180 
    6181                         // Remember the original values
    6182                         width = style.width;
    6183                         minWidth = style.minWidth;
    6184                         maxWidth = style.maxWidth;
    6185 
    6186                         // Put in the new values to get a computed value out
    6187                         style.minWidth = style.maxWidth = style.width = ret;
    6188                         ret = computed.width;
    6189 
    6190                         // Revert the changed values
    6191                         style.width = width;
    6192                         style.minWidth = minWidth;
    6193                         style.maxWidth = maxWidth;
    6194                 }
    6195         }
    6196 
    6197         return ret !== undefined ?
    6198 
    6199                 // Support: IE <=9 - 11 only
    6200                 // IE returns zIndex value as an integer.
    6201                 ret + "" :
    6202                 ret;
    6203 }
    6204 
    6205 
    6206 function addGetHookIf( conditionFn, hookFn ) {
    6207 
    6208         // Define the hook, we'll check on the first run if it's really needed.
    6209         return {
    6210                 get: function() {
    6211                         if ( conditionFn() ) {
    6212 
    6213                                 // Hook not needed (or it's not possible to use it due
    6214                                 // to missing dependency), remove it.
    6215                                 delete this.get;
    6216                                 return;
    6217                         }
    6218 
    6219                         // Hook needed; redefine it so that the support test is not executed again.
    6220                         return ( this.get = hookFn ).apply( this, arguments );
    6221                 }
    6222         };
    6223 }
    6224 
    6225 
    6226 var
    6227 
    6228         // Swappable if display is none or starts with table
    6229         // except "table", "table-cell", or "table-caption"
    6230         // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
    6231         rdisplayswap = /^(none|table(?!-c[ea]).+)/,
    6232         rcustomProp = /^--/,
    6233         cssShow = { position: "absolute", visibility: "hidden", display: "block" },
    6234         cssNormalTransform = {
    6235                 letterSpacing: "0",
    6236                 fontWeight: "400"
    6237         },
    6238 
    6239         cssPrefixes = [ "Webkit", "Moz", "ms" ],
    6240         emptyStyle = document.createElement( "div" ).style;
    6241 
    6242 // Return a css property mapped to a potentially vendor prefixed property
    6243 function vendorPropName( name ) {
    6244 
    6245         // Shortcut for names that are not vendor prefixed
    6246         if ( name in emptyStyle ) {
    6247                 return name;
    6248         }
    6249 
    6250         // Check for vendor prefixed names
    6251         var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
    6252                 i = cssPrefixes.length;
    6253 
    6254         while ( i-- ) {
    6255                 name = cssPrefixes[ i ] + capName;
    6256                 if ( name in emptyStyle ) {
    6257                         return name;
    6258                 }
    6259         }
    6260 }
    6261 
    6262 // Return a property mapped along what jQuery.cssProps suggests or to
    6263 // a vendor prefixed property.
    6264 function finalPropName( name ) {
    6265         var ret = jQuery.cssProps[ name ];
    6266         if ( !ret ) {
    6267                 ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
    6268         }
    6269         return ret;
    6270 }
    6271 
    6272 function setPositiveNumber( elem, value, subtract ) {
    6273 
    6274         // Any relative (+/-) values have already been
    6275         // normalized at this point
    6276         var matches = rcssNum.exec( value );
    6277         return matches ?
    6278 
    6279                 // Guard against undefined "subtract", e.g., when used as in cssHooks
    6280                 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
    6281                 value;
    6282 }
    6283 
    6284 function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
    6285         var i = dimension === "width" ? 1 : 0,
    6286                 extra = 0,
    6287                 delta = 0;
    6288 
    6289         // Adjustment may not be necessary
    6290         if ( box === ( isBorderBox ? "border" : "content" ) ) {
    6291                 return 0;
    6292         }
    6293 
    6294         for ( ; i < 4; i += 2 ) {
    6295 
    6296                 // Both box models exclude margin
    6297                 if ( box === "margin" ) {
    6298                         delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
    6299                 }
    6300 
    6301                 // If we get here with a content-box, we're seeking "padding" or "border" or "margin"
    6302                 if ( !isBorderBox ) {
    6303 
    6304                         // Add padding
    6305                         delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
    6306 
    6307                         // For "border" or "margin", add border
    6308                         if ( box !== "padding" ) {
    6309                                 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
    6310 
    6311                         // But still keep track of it otherwise
    6312                         } else {
    6313                                 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
    6314                         }
    6315 
    6316                 // If we get here with a border-box (content + padding + border), we're seeking "content" or
    6317                 // "padding" or "margin"
    6318                 } else {
    6319 
    6320                         // For "content", subtract padding
    6321                         if ( box === "content" ) {
    6322                                 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
    6323                         }
    6324 
    6325                         // For "content" or "padding", subtract border
    6326                         if ( box !== "margin" ) {
    6327                                 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
    6328                         }
    6329                 }
    6330         }
    6331 
    6332         // Account for positive content-box scroll gutter when requested by providing computedVal
    6333         if ( !isBorderBox && computedVal >= 0 ) {
    6334 
    6335                 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
    6336                 // Assuming integer scroll gutter, subtract the rest and round down
    6337                 delta += Math.max( 0, Math.ceil(
    6338                         elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
    6339                         computedVal -
    6340                         delta -
    6341                         extra -
    6342                         0.5
    6343                 ) );
    6344         }
    6345 
    6346         return delta;
    6347 }
    6348 
    6349 function getWidthOrHeight( elem, dimension, extra ) {
    6350 
    6351         // Start with computed style
    6352         var styles = getStyles( elem ),
    6353                 val = curCSS( elem, dimension, styles ),
    6354                 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
    6355                 valueIsBorderBox = isBorderBox;
    6356 
    6357         // Support: Firefox <=54
    6358         // Return a confounding non-pixel value or feign ignorance, as appropriate.
    6359         if ( rnumnonpx.test( val ) ) {
    6360                 if ( !extra ) {
    6361                         return val;
    6362                 }
    6363                 val = "auto";
    6364         }
    6365 
    6366         // Check for style in case a browser which returns unreliable values
    6367         // for getComputedStyle silently falls back to the reliable elem.style
    6368         valueIsBorderBox = valueIsBorderBox &&
    6369                 ( support.boxSizingReliable() || val === elem.style[ dimension ] );
    6370 
    6371         // Fall back to offsetWidth/offsetHeight when value is "auto"
    6372         // This happens for inline elements with no explicit setting (gh-3571)
    6373         // Support: Android <=4.1 - 4.3 only
    6374         // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
    6375         if ( val === "auto" ||
    6376                 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) {
    6377 
    6378                 val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];
    6379 
    6380                 // offsetWidth/offsetHeight provide border-box values
    6381                 valueIsBorderBox = true;
    6382         }
    6383 
    6384         // Normalize "" and auto
    6385         val = parseFloat( val ) || 0;
    6386 
    6387         // Adjust for the element's box model
    6388         return ( val +
    6389                 boxModelAdjustment(
    6390                         elem,
    6391                         dimension,
    6392                         extra || ( isBorderBox ? "border" : "content" ),
    6393                         valueIsBorderBox,
    6394                         styles,
    6395 
    6396                         // Provide the current computed size to request scroll gutter calculation (gh-3589)
    6397                         val
    6398                 )
    6399         ) + "px";
    6400 }
    6401 
    6402 jQuery.extend( {
    6403 
    6404         // Add in style property hooks for overriding the default
    6405         // behavior of getting and setting a style property
    6406         cssHooks: {
    6407                 opacity: {
    6408                         get: function( elem, computed ) {
    6409                                 if ( computed ) {
    6410 
    6411                                         // We should always get a number back from opacity
    6412                                         var ret = curCSS( elem, "opacity" );
    6413                                         return ret === "" ? "1" : ret;
    6414                                 }
    6415                         }
    6416                 }
    6417         },
    6418 
    6419         // Don't automatically add "px" to these possibly-unitless properties
    6420         cssNumber: {
    6421                 "animationIterationCount": true,
    6422                 "columnCount": true,
    6423                 "fillOpacity": true,
    6424                 "flexGrow": true,
    6425                 "flexShrink": true,
    6426                 "fontWeight": true,
    6427                 "lineHeight": true,
    6428                 "opacity": true,
    6429                 "order": true,
    6430                 "orphans": true,
    6431                 "widows": true,
    6432                 "zIndex": true,
    6433                 "zoom": true
    6434         },
    6435 
    6436         // Add in properties whose names you wish to fix before
    6437         // setting or getting the value
    6438         cssProps: {},
    6439 
    6440         // Get and set the style property on a DOM Node
    6441         style: function( elem, name, value, extra ) {
    6442 
    6443                 // Don't set styles on text and comment nodes
    6444                 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
    6445                         return;
    6446                 }
    6447 
    6448                 // Make sure that we're working with the right name
    6449                 var ret, type, hooks,
    6450                         origName = camelCase( name ),
    6451                         isCustomProp = rcustomProp.test( name ),
    6452                         style = elem.style;
    6453 
    6454                 // Make sure that we're working with the right name. We don't
    6455                 // want to query the value if it is a CSS custom property
    6456                 // since they are user-defined.
    6457                 if ( !isCustomProp ) {
    6458                         name = finalPropName( origName );
    6459                 }
    6460 
    6461                 // Gets hook for the prefixed version, then unprefixed version
    6462                 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
    6463 
    6464                 // Check if we're setting a value
    6465                 if ( value !== undefined ) {
    6466                         type = typeof value;
    6467 
    6468                         // Convert "+=" or "-=" to relative numbers (#7345)
    6469                         if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
    6470                                 value = adjustCSS( elem, name, ret );
    6471 
    6472                                 // Fixes bug #9237
    6473                                 type = "number";
    6474                         }
    6475 
    6476                         // Make sure that null and NaN values aren't set (#7116)
    6477                         if ( value == null || value !== value ) {
    6478                                 return;
    6479                         }
    6480 
    6481                         // If a number was passed in, add the unit (except for certain CSS properties)
    6482                         if ( type === "number" ) {
    6483                                 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
    6484                         }
    6485 
    6486                         // background-* props affect original clone's values
    6487                         if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
    6488                                 style[ name ] = "inherit";
    6489                         }
    6490 
    6491                         // If a hook was provided, use that value, otherwise just set the specified value
    6492                         if ( !hooks || !( "set" in hooks ) ||
    6493                                 ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
    6494 
    6495                                 if ( isCustomProp ) {
    6496                                         style.setProperty( name, value );
    6497                                 } else {
    6498                                         style[ name ] = value;
    6499                                 }
    6500                         }
    6501 
    6502                 } else {
    6503 
    6504                         // If a hook was provided get the non-computed value from there
    6505                         if ( hooks && "get" in hooks &&
    6506                                 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
    6507 
    6508                                 return ret;
    6509                         }
    6510 
    6511                         // Otherwise just get the value from the style object
    6512                         return style[ name ];
    6513                 }
    6514         },
    6515 
    6516         css: function( elem, name, extra, styles ) {
    6517                 var val, num, hooks,
    6518                         origName = camelCase( name ),
    6519                         isCustomProp = rcustomProp.test( name );
    6520 
    6521                 // Make sure that we're working with the right name. We don't
    6522                 // want to modify the value if it is a CSS custom property
    6523                 // since they are user-defined.
    6524                 if ( !isCustomProp ) {
    6525                         name = finalPropName( origName );
    6526                 }
    6527 
    6528                 // Try prefixed name followed by the unprefixed name
    6529                 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
    6530 
    6531                 // If a hook was provided get the computed value from there
    6532                 if ( hooks && "get" in hooks ) {
    6533                         val = hooks.get( elem, true, extra );
    6534                 }
    6535 
    6536                 // Otherwise, if a way to get the computed value exists, use that
    6537                 if ( val === undefined ) {
    6538                         val = curCSS( elem, name, styles );
    6539                 }
    6540 
    6541                 // Convert "normal" to computed value
    6542                 if ( val === "normal" && name in cssNormalTransform ) {
    6543                         val = cssNormalTransform[ name ];
    6544                 }
    6545 
    6546                 // Make numeric if forced or a qualifier was provided and val looks numeric
    6547                 if ( extra === "" || extra ) {
    6548                         num = parseFloat( val );
    6549                         return extra === true || isFinite( num ) ? num || 0 : val;
    6550                 }
    6551 
    6552                 return val;
    6553         }
    6554 } );
    6555 
    6556 jQuery.each( [ "height", "width" ], function( i, dimension ) {
    6557         jQuery.cssHooks[ dimension ] = {
    6558                 get: function( elem, computed, extra ) {
    6559                         if ( computed ) {
    6560 
    6561                                 // Certain elements can have dimension info if we invisibly show them
    6562                                 // but it must have a current display style that would benefit
    6563                                 return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
    6564 
    6565                                         // Support: Safari 8+
    6566                                         // Table columns in Safari have non-zero offsetWidth & zero
    6567                                         // getBoundingClientRect().width unless display is changed.
    6568                                         // Support: IE <=11 only
    6569                                         // Running getBoundingClientRect on a disconnected node
    6570                                         // in IE throws an error.
    6571                                         ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
    6572                                                 swap( elem, cssShow, function() {
    6573                                                         return getWidthOrHeight( elem, dimension, extra );
    6574                                                 } ) :
    6575                                                 getWidthOrHeight( elem, dimension, extra );
    6576                         }
    6577                 },
    6578 
    6579                 set: function( elem, value, extra ) {
    6580                         var matches,
    6581                                 styles = getStyles( elem ),
    6582                                 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
    6583                                 subtract = extra && boxModelAdjustment(
    6584                                         elem,
    6585                                         dimension,
    6586                                         extra,
    6587                                         isBorderBox,
    6588                                         styles
    6589                                 );
    6590 
    6591                         // Account for unreliable border-box dimensions by comparing offset* to computed and
    6592                         // faking a content-box to get border and padding (gh-3699)
    6593                         if ( isBorderBox && support.scrollboxSize() === styles.position ) {
    6594                                 subtract -= Math.ceil(
    6595                                         elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
    6596                                         parseFloat( styles[ dimension ] ) -
    6597                                         boxModelAdjustment( elem, dimension, "border", false, styles ) -
    6598                                         0.5
    6599                                 );
    6600                         }
    6601 
    6602                         // Convert to pixels if value adjustment is needed
    6603                         if ( subtract && ( matches = rcssNum.exec( value ) ) &&
    6604                                 ( matches[ 3 ] || "px" ) !== "px" ) {
    6605 
    6606                                 elem.style[ dimension ] = value;
    6607                                 value = jQuery.css( elem, dimension );
    6608                         }
    6609 
    6610                         return setPositiveNumber( elem, value, subtract );
    6611                 }
    6612         };
    6613 } );
    6614 
    6615 jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
    6616         function( elem, computed ) {
    6617                 if ( computed ) {
    6618                         return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
    6619                                 elem.getBoundingClientRect().left -
    6620                                         swap( elem, { marginLeft: 0 }, function() {
    6621                                                 return elem.getBoundingClientRect().left;
    6622                                         } )
    6623                                 ) + "px";
    6624                 }
    6625         }
    6626 );
    6627 
    6628 // These hooks are used by animate to expand properties
    6629 jQuery.each( {
    6630         margin: "",
    6631         padding: "",
    6632         border: "Width"
    6633 }, function( prefix, suffix ) {
    6634         jQuery.cssHooks[ prefix + suffix ] = {
    6635                 expand: function( value ) {
    6636                         var i = 0,
    6637                                 expanded = {},
    6638 
    6639                                 // Assumes a single number if not a string
    6640                                 parts = typeof value === "string" ? value.split( " " ) : [ value ];
    6641 
    6642                         for ( ; i < 4; i++ ) {
    6643                                 expanded[ prefix + cssExpand[ i ] + suffix ] =
    6644                                         parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
    6645                         }
    6646 
    6647                         return expanded;
    6648                 }
    6649         };
    6650 
    6651         if ( prefix !== "margin" ) {
    6652                 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
    6653         }
    6654 } );
    6655 
    6656 jQuery.fn.extend( {
    6657         css: function( name, value ) {
    6658                 return access( this, function( elem, name, value ) {
    6659                         var styles, len,
    6660                                 map = {},
    6661                                 i = 0;
    6662 
    6663                         if ( Array.isArray( name ) ) {
    6664                                 styles = getStyles( elem );
    6665                                 len = name.length;
    6666 
    6667                                 for ( ; i < len; i++ ) {
    6668                                         map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
    6669                                 }
    6670 
    6671                                 return map;
    6672                         }
    6673 
    6674                         return value !== undefined ?
    6675                                 jQuery.style( elem, name, value ) :
    6676                                 jQuery.css( elem, name );
    6677                 }, name, value, arguments.length > 1 );
    6678         }
    6679 } );
    6680 
    6681 
    6682 function Tween( elem, options, prop, end, easing ) {
    6683         return new Tween.prototype.init( elem, options, prop, end, easing );
    6684 }
    6685 jQuery.Tween = Tween;
    6686 
    6687 Tween.prototype = {
    6688         constructor: Tween,
    6689         init: function( elem, options, prop, end, easing, unit ) {
    6690                 this.elem = elem;
    6691                 this.prop = prop;
    6692                 this.easing = easing || jQuery.easing._default;
    6693                 this.options = options;
    6694                 this.start = this.now = this.cur();
    6695                 this.end = end;
    6696                 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
    6697         },
    6698         cur: function() {
    6699                 var hooks = Tween.propHooks[ this.prop ];
    6700 
    6701                 return hooks && hooks.get ?
    6702                         hooks.get( this ) :
    6703                         Tween.propHooks._default.get( this );
    6704         },
    6705         run: function( percent ) {
    6706                 var eased,
    6707                         hooks = Tween.propHooks[ this.prop ];
    6708 
    6709                 if ( this.options.duration ) {
    6710                         this.pos = eased = jQuery.easing[ this.easing ](
    6711                                 percent, this.options.duration * percent, 0, 1, this.options.duration
    6712                         );
    6713                 } else {
    6714                         this.pos = eased = percent;
    6715                 }
    6716                 this.now = ( this.end - this.start ) * eased + this.start;
    6717 
    6718                 if ( this.options.step ) {
    6719                         this.options.step.call( this.elem, this.now, this );
    6720                 }
    6721 
    6722                 if ( hooks && hooks.set ) {
    6723                         hooks.set( this );
    6724                 } else {
    6725                         Tween.propHooks._default.set( this );
    6726                 }
    6727                 return this;
    6728         }
    6729 };
    6730 
    6731 Tween.prototype.init.prototype = Tween.prototype;
    6732 
    6733 Tween.propHooks = {
    6734         _default: {
    6735                 get: function( tween ) {
    6736                         var result;
    6737 
    6738                         // Use a property on the element directly when it is not a DOM element,
    6739                         // or when there is no matching style property that exists.
    6740                         if ( tween.elem.nodeType !== 1 ||
    6741                                 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
    6742                                 return tween.elem[ tween.prop ];
    6743                         }
    6744 
    6745                         // Passing an empty string as a 3rd parameter to .css will automatically
    6746                         // attempt a parseFloat and fallback to a string if the parse fails.
    6747                         // Simple values such as "10px" are parsed to Float;
    6748                         // complex values such as "rotate(1rad)" are returned as-is.
    6749                         result = jQuery.css( tween.elem, tween.prop, "" );
    6750 
    6751                         // Empty strings, null, undefined and "auto" are converted to 0.
    6752                         return !result || result === "auto" ? 0 : result;
    6753                 },
    6754                 set: function( tween ) {
    6755 
    6756                         // Use step hook for back compat.
    6757                         // Use cssHook if its there.
    6758                         // Use .style if available and use plain properties where available.
    6759                         if ( jQuery.fx.step[ tween.prop ] ) {
    6760                                 jQuery.fx.step[ tween.prop ]( tween );
    6761                         } else if ( tween.elem.nodeType === 1 &&
    6762                                 ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
    6763                                         jQuery.cssHooks[ tween.prop ] ) ) {
    6764                                 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
    6765                         } else {
    6766                                 tween.elem[ tween.prop ] = tween.now;
    6767                         }
    6768                 }
    6769         }
    6770 };
    6771 
    6772 // Support: IE <=9 only
    6773 // Panic based approach to setting things on disconnected nodes
    6774 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
    6775         set: function( tween ) {
    6776                 if ( tween.elem.nodeType && tween.elem.parentNode ) {
    6777                         tween.elem[ tween.prop ] = tween.now;
    6778                 }
    6779         }
    6780 };
    6781 
    6782 jQuery.easing = {
    6783         linear: function( p ) {
    6784                 return p;
    6785         },
    6786         swing: function( p ) {
    6787                 return 0.5 - Math.cos( p * Math.PI ) / 2;
    6788         },
    6789         _default: "swing"
    6790 };
    6791 
    6792 jQuery.fx = Tween.prototype.init;
    6793 
    6794 // Back compat <1.8 extension point
    6795 jQuery.fx.step = {};
    6796 
    6797 
    6798 
    6799 
    6800 var
    6801         fxNow, inProgress,
    6802         rfxtypes = /^(?:toggle|show|hide)$/,
    6803         rrun = /queueHooks$/;
    6804 
    6805 function schedule() {
    6806         if ( inProgress ) {
    6807                 if ( document.hidden === false && window.requestAnimationFrame ) {
    6808                         window.requestAnimationFrame( schedule );
    6809                 } else {
    6810                         window.setTimeout( schedule, jQuery.fx.interval );
    6811                 }
    6812 
    6813                 jQuery.fx.tick();
    6814         }
    6815 }
    6816 
    6817 // Animations created synchronously will run synchronously
    6818 function createFxNow() {
    6819         window.setTimeout( function() {
    6820                 fxNow = undefined;
    6821         } );
    6822         return ( fxNow = Date.now() );
    6823 }
    6824 
    6825 // Generate parameters to create a standard animation
    6826 function genFx( type, includeWidth ) {
    6827         var which,
    6828                 i = 0,
    6829                 attrs = { height: type };
    6830 
    6831         // If we include width, step value is 1 to do all cssExpand values,
    6832         // otherwise step value is 2 to skip over Left and Right
    6833         includeWidth = includeWidth ? 1 : 0;
    6834         for ( ; i < 4; i += 2 - includeWidth ) {
    6835                 which = cssExpand[ i ];
    6836                 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
    6837         }
    6838 
    6839         if ( includeWidth ) {
    6840                 attrs.opacity = attrs.width = type;
    6841         }
    6842 
    6843         return attrs;
    6844 }
    6845 
    6846 function createTween( value, prop, animation ) {
    6847         var tween,
    6848                 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
    6849                 index = 0,
    6850                 length = collection.length;
    6851         for ( ; index < length; index++ ) {
    6852                 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
    6853 
    6854                         // We're done with this property
    6855                         return tween;
    6856                 }
    6857         }
    6858 }
    6859 
    6860 function defaultPrefilter( elem, props, opts ) {
    6861         var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
    6862                 isBox = "width" in props || "height" in props,
    6863                 anim = this,
    6864                 orig = {},
    6865                 style = elem.style,
    6866                 hidden = elem.nodeType && isHiddenWithinTree( elem ),
    6867                 dataShow = dataPriv.get( elem, "fxshow" );
    6868 
    6869         // Queue-skipping animations hijack the fx hooks
    6870         if ( !opts.queue ) {
    6871                 hooks = jQuery._queueHooks( elem, "fx" );
    6872                 if ( hooks.unqueued == null ) {
    6873                         hooks.unqueued = 0;
    6874                         oldfire = hooks.empty.fire;
    6875                         hooks.empty.fire = function() {
    6876                                 if ( !hooks.unqueued ) {
    6877                                         oldfire();
    6878                                 }
    6879                         };
    6880                 }
    6881                 hooks.unqueued++;
    6882 
    6883                 anim.always( function() {
    6884 
    6885                         // Ensure the complete handler is called before this completes
    6886                         anim.always( function() {
    6887                                 hooks.unqueued--;
    6888                                 if ( !jQuery.queue( elem, "fx" ).length ) {
    6889                                         hooks.empty.fire();
    6890                                 }
    6891                         } );
    6892                 } );
    6893         }
    6894 
    6895         // Detect show/hide animations
    6896         for ( prop in props ) {
    6897                 value = props[ prop ];
    6898                 if ( rfxtypes.test( value ) ) {
    6899                         delete props[ prop ];
    6900                         toggle = toggle || value === "toggle";
    6901                         if ( value === ( hidden ? "hide" : "show" ) ) {
    6902 
    6903                                 // Pretend to be hidden if this is a "show" and
    6904                                 // there is still data from a stopped show/hide
    6905                                 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
    6906                                         hidden = true;
    6907 
    6908                                 // Ignore all other no-op show/hide data
    6909                                 } else {
    6910                                         continue;
    6911                                 }
    6912                         }
    6913                         orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
    6914                 }
    6915         }
    6916 
    6917         // Bail out if this is a no-op like .hide().hide()
    6918         propTween = !jQuery.isEmptyObject( props );
    6919         if ( !propTween && jQuery.isEmptyObject( orig ) ) {
    6920                 return;
    6921         }
    6922 
    6923         // Restrict "overflow" and "display" styles during box animations
    6924         if ( isBox && elem.nodeType === 1 ) {
    6925 
    6926                 // Support: IE <=9 - 11, Edge 12 - 15
    6927                 // Record all 3 overflow attributes because IE does not infer the shorthand
    6928                 // from identically-valued overflowX and overflowY and Edge just mirrors
    6929                 // the overflowX value there.
    6930                 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
    6931 
    6932                 // Identify a display type, preferring old show/hide data over the CSS cascade
    6933                 restoreDisplay = dataShow && dataShow.display;
    6934                 if ( restoreDisplay == null ) {
    6935                         restoreDisplay = dataPriv.get( elem, "display" );
    6936                 }
    6937                 display = jQuery.css( elem, "display" );
    6938                 if ( display === "none" ) {
    6939                         if ( restoreDisplay ) {
    6940                                 display = restoreDisplay;
    6941                         } else {
    6942 
    6943                                 // Get nonempty value(s) by temporarily forcing visibility
    6944                                 showHide( [ elem ], true );
    6945                                 restoreDisplay = elem.style.display || restoreDisplay;
    6946                                 display = jQuery.css( elem, "display" );
    6947                                 showHide( [ elem ] );
    6948                         }
    6949                 }
    6950 
    6951                 // Animate inline elements as inline-block
    6952                 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
    6953                         if ( jQuery.css( elem, "float" ) === "none" ) {
    6954 
    6955                                 // Restore the original display value at the end of pure show/hide animations
    6956                                 if ( !propTween ) {
    6957                                         anim.done( function() {
    6958                                                 style.display = restoreDisplay;
    6959                                         } );
    6960                                         if ( restoreDisplay == null ) {
    6961                                                 display = style.display;
    6962                                                 restoreDisplay = display === "none" ? "" : display;
    6963                                         }
    6964                                 }
    6965                                 style.display = "inline-block";
    6966                         }
    6967                 }
    6968         }
    6969 
    6970         if ( opts.overflow ) {
    6971                 style.overflow = "hidden";
    6972                 anim.always( function() {
    6973                         style.overflow = opts.overflow[ 0 ];
    6974                         style.overflowX = opts.overflow[ 1 ];
    6975                         style.overflowY = opts.overflow[ 2 ];
    6976                 } );
    6977         }
    6978 
    6979         // Implement show/hide animations
    6980         propTween = false;
    6981         for ( prop in orig ) {
    6982 
    6983                 // General show/hide setup for this element animation
    6984                 if ( !propTween ) {
    6985                         if ( dataShow ) {
    6986                                 if ( "hidden" in dataShow ) {
    6987                                         hidden = dataShow.hidden;
    6988                                 }
    6989                         } else {
    6990                                 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
    6991                         }
    6992 
    6993                         // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
    6994                         if ( toggle ) {
    6995                                 dataShow.hidden = !hidden;
    6996                         }
    6997 
    6998                         // Show elements before animating them
    6999                         if ( hidden ) {
    7000                                 showHide( [ elem ], true );
    7001                         }
    7002 
    7003                         /* eslint-disable no-loop-func */
    7004 
    7005                         anim.done( function() {
    7006 
    7007                         /* eslint-enable no-loop-func */
    7008 
    7009                                 // The final step of a "hide" animation is actually hiding the element
    7010                                 if ( !hidden ) {
    7011                                         showHide( [ elem ] );
    7012                                 }
    7013                                 dataPriv.remove( elem, "fxshow" );
    7014                                 for ( prop in orig ) {
    7015                                         jQuery.style( elem, prop, orig[ prop ] );
    7016                                 }
    7017                         } );
    7018                 }
    7019 
    7020                 // Per-property setup
    7021                 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
    7022                 if ( !( prop in dataShow ) ) {
    7023                         dataShow[ prop ] = propTween.start;
    7024                         if ( hidden ) {
    7025                                 propTween.end = propTween.start;
    7026                                 propTween.start = 0;
    7027                         }
    7028                 }
    7029         }
    7030 }
    7031 
    7032 function propFilter( props, specialEasing ) {
    7033         var index, name, easing, value, hooks;
    7034 
    7035         // camelCase, specialEasing and expand cssHook pass
    7036         for ( index in props ) {
    7037                 name = camelCase( index );
    7038                 easing = specialEasing[ name ];
    7039                 value = props[ index ];
    7040                 if ( Array.isArray( value ) ) {
    7041                         easing = value[ 1 ];
    7042                         value = props[ index ] = value[ 0 ];
    7043                 }
    7044 
    7045                 if ( index !== name ) {
    7046                         props[ name ] = value;
    7047                         delete props[ index ];
    7048                 }
    7049 
    7050                 hooks = jQuery.cssHooks[ name ];
    7051                 if ( hooks && "expand" in hooks ) {
    7052                         value = hooks.expand( value );
    7053                         delete props[ name ];
    7054 
    7055                         // Not quite $.extend, this won't overwrite existing keys.
    7056                         // Reusing 'index' because we have the correct "name"
    7057                         for ( index in value ) {
    7058                                 if ( !( index in props ) ) {
    7059                                         props[ index ] = value[ index ];
    7060                                         specialEasing[ index ] = easing;
    7061                                 }
    7062                         }
    7063                 } else {
    7064                         specialEasing[ name ] = easing;
    7065                 }
    7066         }
    7067 }
    7068 
    7069 function Animation( elem, properties, options ) {
    7070         var result,
    7071                 stopped,
    7072                 index = 0,
    7073                 length = Animation.prefilters.length,
    7074                 deferred = jQuery.Deferred().always( function() {
    7075 
    7076                         // Don't match elem in the :animated selector
    7077                         delete tick.elem;
    7078                 } ),
    7079                 tick = function() {
    7080                         if ( stopped ) {
    7081                                 return false;
    7082                         }
    7083                         var currentTime = fxNow || createFxNow(),
    7084                                 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
    7085 
    7086                                 // Support: Android 2.3 only
    7087                                 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
    7088                                 temp = remaining / animation.duration || 0,
    7089                                 percent = 1 - temp,
    7090                                 index = 0,
    7091                                 length = animation.tweens.length;
    7092 
    7093                         for ( ; index < length; index++ ) {
    7094                                 animation.tweens[ index ].run( percent );
    7095                         }
    7096 
    7097                         deferred.notifyWith( elem, [ animation, percent, remaining ] );
    7098 
    7099                         // If there's more to do, yield
    7100                         if ( percent < 1 && length ) {
    7101                                 return remaining;
    7102                         }
    7103 
    7104                         // If this was an empty animation, synthesize a final progress notification
    7105                         if ( !length ) {
    7106                                 deferred.notifyWith( elem, [ animation, 1, 0 ] );
    7107                         }
    7108 
    7109                         // Resolve the animation and report its conclusion
    7110                         deferred.resolveWith( elem, [ animation ] );
    7111                         return false;
    7112                 },
    7113                 animation = deferred.promise( {
    7114                         elem: elem,
    7115                         props: jQuery.extend( {}, properties ),
    7116                         opts: jQuery.extend( true, {
    7117                                 specialEasing: {},
    7118                                 easing: jQuery.easing._default
    7119                         }, options ),
    7120                         originalProperties: properties,
    7121                         originalOptions: options,
    7122                         startTime: fxNow || createFxNow(),
    7123                         duration: options.duration,
    7124                         tweens: [],
    7125                         createTween: function( prop, end ) {
    7126                                 var tween = jQuery.Tween( elem, animation.opts, prop, end,
    7127                                                 animation.opts.specialEasing[ prop ] || animation.opts.easing );
    7128                                 animation.tweens.push( tween );
    7129                                 return tween;
    7130                         },
    7131                         stop: function( gotoEnd ) {
    7132                                 var index = 0,
    7133 
    7134                                         // If we are going to the end, we want to run all the tweens
    7135                                         // otherwise we skip this part
    7136                                         length = gotoEnd ? animation.tweens.length : 0;
    7137                                 if ( stopped ) {
    7138                                         return this;
    7139                                 }
    7140                                 stopped = true;
    7141                                 for ( ; index < length; index++ ) {
    7142                                         animation.tweens[ index ].run( 1 );
    7143                                 }
    7144 
    7145                                 // Resolve when we played the last frame; otherwise, reject
    7146                                 if ( gotoEnd ) {
    7147                                         deferred.notifyWith( elem, [ animation, 1, 0 ] );
    7148                                         deferred.resolveWith( elem, [ animation, gotoEnd ] );
    7149                                 } else {
    7150                                         deferred.rejectWith( elem, [ animation, gotoEnd ] );
    7151                                 }
    7152                                 return this;
    7153                         }
    7154                 } ),
    7155                 props = animation.props;
    7156 
    7157         propFilter( props, animation.opts.specialEasing );
    7158 
    7159         for ( ; index < length; index++ ) {
    7160                 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
    7161                 if ( result ) {
    7162                         if ( isFunction( result.stop ) ) {
    7163                                 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
    7164                                         result.stop.bind( result );
    7165                         }
    7166                         return result;
    7167                 }
    7168         }
    7169 
    7170         jQuery.map( props, createTween, animation );
    7171 
    7172         if ( isFunction( animation.opts.start ) ) {
    7173                 animation.opts.start.call( elem, animation );
    7174         }
    7175 
    7176         // Attach callbacks from options
    7177         animation
    7178                 .progress( animation.opts.progress )
    7179                 .done( animation.opts.done, animation.opts.complete )
    7180                 .fail( animation.opts.fail )
    7181                 .always( animation.opts.always );
    7182 
    7183         jQuery.fx.timer(
    7184                 jQuery.extend( tick, {
    7185                         elem: elem,
    7186                         anim: animation,
    7187                         queue: animation.opts.queue
    7188                 } )
    7189         );
    7190 
    7191         return animation;
    7192 }
    7193 
    7194 jQuery.Animation = jQuery.extend( Animation, {
    7195 
    7196         tweeners: {
    7197                 "*": [ function( prop, value ) {
    7198                         var tween = this.createTween( prop, value );
    7199                         adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
    7200                         return tween;
    7201                 } ]
    7202         },
    7203 
    7204         tweener: function( props, callback ) {
    7205                 if ( isFunction( props ) ) {
    7206                         callback = props;
    7207                         props = [ "*" ];
    7208                 } else {
    7209                         props = props.match( rnothtmlwhite );
    7210                 }
    7211 
    7212                 var prop,
    7213                         index = 0,
    7214                         length = props.length;
    7215 
    7216                 for ( ; index < length; index++ ) {
    7217                         prop = props[ index ];
    7218                         Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
    7219                         Animation.tweeners[ prop ].unshift( callback );
    7220                 }
    7221         },
    7222 
    7223         prefilters: [ defaultPrefilter ],
    7224 
    7225         prefilter: function( callback, prepend ) {
    7226                 if ( prepend ) {
    7227                         Animation.prefilters.unshift( callback );
    7228                 } else {
    7229                         Animation.prefilters.push( callback );
    7230                 }
    7231         }
    7232 } );
    7233 
    7234 jQuery.speed = function( speed, easing, fn ) {
    7235         var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
    7236                 complete: fn || !fn && easing ||
    7237                         isFunction( speed ) && speed,
    7238                 duration: speed,
    7239                 easing: fn && easing || easing && !isFunction( easing ) && easing
    7240         };
    7241 
    7242         // Go to the end state if fx are off
    7243         if ( jQuery.fx.off ) {
    7244                 opt.duration = 0;
    7245 
    7246         } else {
    7247                 if ( typeof opt.duration !== "number" ) {
    7248                         if ( opt.duration in jQuery.fx.speeds ) {
    7249                                 opt.duration = jQuery.fx.speeds[ opt.duration ];
    7250 
    7251                         } else {
    7252                                 opt.duration = jQuery.fx.speeds._default;
    7253                         }
    7254                 }
    7255         }
    7256 
    7257         // Normalize opt.queue - true/undefined/null -> "fx"
    7258         if ( opt.queue == null || opt.queue === true ) {
    7259                 opt.queue = "fx";
    7260         }
    7261 
    7262         // Queueing
    7263         opt.old = opt.complete;
    7264 
    7265         opt.complete = function() {
    7266                 if ( isFunction( opt.old ) ) {
    7267                         opt.old.call( this );
    7268                 }
    7269 
    7270                 if ( opt.queue ) {
    7271                         jQuery.dequeue( this, opt.queue );
    7272                 }
    7273         };
    7274 
    7275         return opt;
    7276 };
    7277 
    7278 jQuery.fn.extend( {
    7279         fadeTo: function( speed, to, easing, callback ) {
    7280 
    7281                 // Show any hidden elements after setting opacity to 0
    7282                 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
    7283 
    7284                         // Animate to the value specified
    7285                         .end().animate( { opacity: to }, speed, easing, callback );
    7286         },
    7287         animate: function( prop, speed, easing, callback ) {
    7288                 var empty = jQuery.isEmptyObject( prop ),
    7289                         optall = jQuery.speed( speed, easing, callback ),
    7290                         doAnimation = function() {
    7291 
    7292                                 // Operate on a copy of prop so per-property easing won't be lost
    7293                                 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
    7294 
    7295                                 // Empty animations, or finishing resolves immediately
    7296                                 if ( empty || dataPriv.get( this, "finish" ) ) {
    7297                                         anim.stop( true );
    7298                                 }
    7299                         };
    7300                         doAnimation.finish = doAnimation;
    7301 
    7302                 return empty || optall.queue === false ?
    7303                         this.each( doAnimation ) :
    7304                         this.queue( optall.queue, doAnimation );
    7305         },
    7306         stop: function( type, clearQueue, gotoEnd ) {
    7307                 var stopQueue = function( hooks ) {
    7308                         var stop = hooks.stop;
    7309                         delete hooks.stop;
    7310                         stop( gotoEnd );
    7311                 };
    7312 
    7313                 if ( typeof type !== "string" ) {
    7314                         gotoEnd = clearQueue;
    7315                         clearQueue = type;
    7316                         type = undefined;
    7317                 }
    7318                 if ( clearQueue && type !== false ) {
    7319                         this.queue( type || "fx", [] );
    7320                 }
    7321 
    7322                 return this.each( function() {
    7323                         var dequeue = true,
    7324                                 index = type != null && type + "queueHooks",
    7325                                 timers = jQuery.timers,
    7326                                 data = dataPriv.get( this );
    7327 
    7328                         if ( index ) {
    7329                                 if ( data[ index ] && data[ index ].stop ) {
    7330                                         stopQueue( data[ index ] );
    7331                                 }
    7332                         } else {
    7333                                 for ( index in data ) {
    7334                                         if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
    7335                                                 stopQueue( data[ index ] );
    7336                                         }
    7337                                 }
    7338                         }
    7339 
    7340                         for ( index = timers.length; index--; ) {
    7341                                 if ( timers[ index ].elem === this &&
    7342                                         ( type == null || timers[ index ].queue === type ) ) {
    7343 
    7344                                         timers[ index ].anim.stop( gotoEnd );
    7345                                         dequeue = false;
    7346                                         timers.splice( index, 1 );
    7347                                 }
    7348                         }
    7349 
    7350                         // Start the next in the queue if the last step wasn't forced.
    7351                         // Timers currently will call their complete callbacks, which
    7352                         // will dequeue but only if they were gotoEnd.
    7353                         if ( dequeue || !gotoEnd ) {
    7354                                 jQuery.dequeue( this, type );
    7355                         }
    7356                 } );
    7357         },
    7358         finish: function( type ) {
    7359                 if ( type !== false ) {
    7360                         type = type || "fx";
    7361                 }
    7362                 return this.each( function() {
    7363                         var index,
    7364                                 data = dataPriv.get( this ),
    7365                                 queue = data[ type + "queue" ],
    7366                                 hooks = data[ type + "queueHooks" ],
    7367                                 timers = jQuery.timers,
    7368                                 length = queue ? queue.length : 0;
    7369 
    7370                         // Enable finishing flag on private data
    7371                         data.finish = true;
    7372 
    7373                         // Empty the queue first
    7374                         jQuery.queue( this, type, [] );
    7375 
    7376                         if ( hooks && hooks.stop ) {
    7377                                 hooks.stop.call( this, true );
    7378                         }
    7379 
    7380                         // Look for any active animations, and finish them
    7381                         for ( index = timers.length; index--; ) {
    7382                                 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
    7383                                         timers[ index ].anim.stop( true );
    7384                                         timers.splice( index, 1 );
    7385                                 }
    7386                         }
    7387 
    7388                         // Look for any animations in the old queue and finish them
    7389                         for ( index = 0; index < length; index++ ) {
    7390                                 if ( queue[ index ] && queue[ index ].finish ) {
    7391                                         queue[ index ].finish.call( this );
    7392                                 }
    7393                         }
    7394 
    7395                         // Turn off finishing flag
    7396                         delete data.finish;
    7397                 } );
    7398         }
    7399 } );
    7400 
    7401 jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
    7402         var cssFn = jQuery.fn[ name ];
    7403         jQuery.fn[ name ] = function( speed, easing, callback ) {
    7404                 return speed == null || typeof speed === "boolean" ?
    7405                         cssFn.apply( this, arguments ) :
    7406                         this.animate( genFx( name, true ), speed, easing, callback );
    7407         };
    7408 } );
    7409 
    7410 // Generate shortcuts for custom animations
    7411 jQuery.each( {
    7412         slideDown: genFx( "show" ),
    7413         slideUp: genFx( "hide" ),
    7414         slideToggle: genFx( "toggle" ),
    7415         fadeIn: { opacity: "show" },
    7416         fadeOut: { opacity: "hide" },
    7417         fadeToggle: { opacity: "toggle" }
    7418 }, function( name, props ) {
    7419         jQuery.fn[ name ] = function( speed, easing, callback ) {
    7420                 return this.animate( props, speed, easing, callback );
    7421         };
    7422 } );
    7423 
    7424 jQuery.timers = [];
    7425 jQuery.fx.tick = function() {
    7426         var timer,
    7427                 i = 0,
    7428                 timers = jQuery.timers;
    7429 
    7430         fxNow = Date.now();
    7431 
    7432         for ( ; i < timers.length; i++ ) {
    7433                 timer = timers[ i ];
    7434 
    7435                 // Run the timer and safely remove it when done (allowing for external removal)
    7436                 if ( !timer() && timers[ i ] === timer ) {
    7437                         timers.splice( i--, 1 );
    7438                 }
    7439         }
    7440 
    7441         if ( !timers.length ) {
    7442                 jQuery.fx.stop();
    7443         }
    7444         fxNow = undefined;
    7445 };
    7446 
    7447 jQuery.fx.timer = function( timer ) {
    7448         jQuery.timers.push( timer );
    7449         jQuery.fx.start();
    7450 };
    7451 
    7452 jQuery.fx.interval = 13;
    7453 jQuery.fx.start = function() {
    7454         if ( inProgress ) {
    7455                 return;
    7456         }
    7457 
    7458         inProgress = true;
    7459         schedule();
    7460 };
    7461 
    7462 jQuery.fx.stop = function() {
    7463         inProgress = null;
    7464 };
    7465 
    7466 jQuery.fx.speeds = {
    7467         slow: 600,
    7468         fast: 200,
    7469 
    7470         // Default speed
    7471         _default: 400
    7472 };
    7473 
    7474 
    7475 // Based off of the plugin by Clint Helfers, with permission.
    7476 // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
    7477 jQuery.fn.delay = function( time, type ) {
    7478         time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
    7479         type = type || "fx";
    7480 
    7481         return this.queue( type, function( next, hooks ) {
    7482                 var timeout = window.setTimeout( next, time );
    7483                 hooks.stop = function() {
    7484                         window.clearTimeout( timeout );
    7485                 };
    7486         } );
    7487 };
    7488 
    7489 
    7490 ( function() {
    7491         var input = document.createElement( "input" ),
    7492                 select = document.createElement( "select" ),
    7493                 opt = select.appendChild( document.createElement( "option" ) );
    7494 
    7495         input.type = "checkbox";
    7496 
    7497         // Support: Android <=4.3 only
    7498         // Default value for a checkbox should be "on"
    7499         support.checkOn = input.value !== "";
    7500 
    7501         // Support: IE <=11 only
    7502         // Must access selectedIndex to make default options select
    7503         support.optSelected = opt.selected;
    7504 
    7505         // Support: IE <=11 only
    7506         // An input loses its value after becoming a radio
    7507         input = document.createElement( "input" );
    7508         input.value = "t";
    7509         input.type = "radio";
    7510         support.radioValue = input.value === "t";
    7511 } )();
    7512 
    7513 
    7514 var boolHook,
    7515         attrHandle = jQuery.expr.attrHandle;
    7516 
    7517 jQuery.fn.extend( {
    7518         attr: function( name, value ) {
    7519                 return access( this, jQuery.attr, name, value, arguments.length > 1 );
    7520         },
    7521 
    7522         removeAttr: function( name ) {
    7523                 return this.each( function() {
    7524                         jQuery.removeAttr( this, name );
    7525                 } );
    7526         }
    7527 } );
    7528 
    7529 jQuery.extend( {
    7530         attr: function( elem, name, value ) {
    7531                 var ret, hooks,
    7532                         nType = elem.nodeType;
    7533 
    7534                 // Don't get/set attributes on text, comment and attribute nodes
    7535                 if ( nType === 3 || nType === 8 || nType === 2 ) {
    7536                         return;
    7537                 }
    7538 
    7539                 // Fallback to prop when attributes are not supported
    7540                 if ( typeof elem.getAttribute === "undefined" ) {
    7541                         return jQuery.prop( elem, name, value );
    7542                 }
    7543 
    7544                 // Attribute hooks are determined by the lowercase version
    7545                 // Grab necessary hook if one is defined
    7546                 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
    7547                         hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
    7548                                 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
    7549                 }
    7550 
    7551                 if ( value !== undefined ) {
    7552                         if ( value === null ) {
    7553                                 jQuery.removeAttr( elem, name );
    7554                                 return;
    7555                         }
    7556 
    7557                         if ( hooks && "set" in hooks &&
    7558                                 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
    7559                                 return ret;
    7560                         }
    7561 
    7562                         elem.setAttribute( name, value + "" );
    7563                         return value;
    7564                 }
    7565 
    7566                 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
    7567                         return ret;
    7568                 }
    7569 
    7570                 ret = jQuery.find.attr( elem, name );
    7571 
    7572                 // Non-existent attributes return null, we normalize to undefined
    7573                 return ret == null ? undefined : ret;
    7574         },
    7575 
    7576         attrHooks: {
    7577                 type: {
    7578                         set: function( elem, value ) {
    7579                                 if ( !support.radioValue && value === "radio" &&
    7580                                         nodeName( elem, "input" ) ) {
    7581                                         var val = elem.value;
    7582                                         elem.setAttribute( "type", value );
    7583                                         if ( val ) {
    7584                                                 elem.value = val;
    7585                                         }
    7586                                         return value;
    7587                                 }
    7588                         }
    7589                 }
    7590         },
    7591 
    7592         removeAttr: function( elem, value ) {
    7593                 var name,
    7594                         i = 0,
    7595 
    7596                         // Attribute names can contain non-HTML whitespace characters
    7597                         // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
    7598                         attrNames = value && value.match( rnothtmlwhite );
    7599 
    7600                 if ( attrNames && elem.nodeType === 1 ) {
    7601                         while ( ( name = attrNames[ i++ ] ) ) {
    7602                                 elem.removeAttribute( name );
    7603                         }
    7604                 }
    7605         }
    7606 } );
    7607 
    7608 // Hooks for boolean attributes
    7609 boolHook = {
    7610         set: function( elem, value, name ) {
    7611                 if ( value === false ) {
    7612 
    7613                         // Remove boolean attributes when set to false
    7614                         jQuery.removeAttr( elem, name );
    7615                 } else {
    7616                         elem.setAttribute( name, name );
    7617                 }
    7618                 return name;
    7619         }
    7620 };
    7621 
    7622 jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
    7623         var getter = attrHandle[ name ] || jQuery.find.attr;
    7624 
    7625         attrHandle[ name ] = function( elem, name, isXML ) {
    7626                 var ret, handle,
    7627                         lowercaseName = name.toLowerCase();
    7628 
    7629                 if ( !isXML ) {
    7630 
    7631                         // Avoid an infinite loop by temporarily removing this function from the getter
    7632                         handle = attrHandle[ lowercaseName ];
    7633                         attrHandle[ lowercaseName ] = ret;
    7634                         ret = getter( elem, name, isXML ) != null ?
    7635                                 lowercaseName :
    7636                                 null;
    7637                         attrHandle[ lowercaseName ] = handle;
    7638                 }
    7639                 return ret;
    7640         };
    7641 } );
    7642 
    7643 
    7644 
    7645 
    7646 var rfocusable = /^(?:input|select|textarea|button)$/i,
    7647         rclickable = /^(?:a|area)$/i;
    7648 
    7649 jQuery.fn.extend( {
    7650         prop: function( name, value ) {
    7651                 return access( this, jQuery.prop, name, value, arguments.length > 1 );
    7652         },
    7653 
    7654         removeProp: function( name ) {
    7655                 return this.each( function() {
    7656                         delete this[ jQuery.propFix[ name ] || name ];
    7657                 } );
    7658         }
    7659 } );
    7660 
    7661 jQuery.extend( {
    7662         prop: function( elem, name, value ) {
    7663                 var ret, hooks,
    7664                         nType = elem.nodeType;
    7665 
    7666                 // Don't get/set properties on text, comment and attribute nodes
    7667                 if ( nType === 3 || nType === 8 || nType === 2 ) {
    7668                         return;
    7669                 }
    7670 
    7671                 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
    7672 
    7673                         // Fix name and attach hooks
    7674                         name = jQuery.propFix[ name ] || name;
    7675                         hooks = jQuery.propHooks[ name ];
    7676                 }
    7677 
    7678                 if ( value !== undefined ) {
    7679                         if ( hooks && "set" in hooks &&
    7680                                 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
    7681                                 return ret;
    7682                         }
    7683 
    7684                         return ( elem[ name ] = value );
    7685                 }
    7686 
    7687                 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
    7688                         return ret;
    7689                 }
    7690 
    7691                 return elem[ name ];
    7692         },
    7693 
    7694         propHooks: {
    7695                 tabIndex: {
    7696                         get: function( elem ) {
    7697 
    7698                                 // Support: IE <=9 - 11 only
    7699                                 // elem.tabIndex doesn't always return the
    7700                                 // correct value when it hasn't been explicitly set
    7701                                 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
    7702                                 // Use proper attribute retrieval(#12072)
    7703                                 var tabindex = jQuery.find.attr( elem, "tabindex" );
    7704 
    7705                                 if ( tabindex ) {
    7706                                         return parseInt( tabindex, 10 );
    7707                                 }
    7708 
    7709                                 if (
    7710                                         rfocusable.test( elem.nodeName ) ||
    7711                                         rclickable.test( elem.nodeName ) &&
    7712                                         elem.href
    7713                                 ) {
    7714                                         return 0;
    7715                                 }
    7716 
    7717                                 return -1;
    7718                         }
    7719                 }
    7720         },
    7721 
    7722         propFix: {
    7723                 "for": "htmlFor",
    7724                 "class": "className"
    7725         }
    7726 } );
    7727 
    7728 // Support: IE <=11 only
    7729 // Accessing the selectedIndex property
    7730 // forces the browser to respect setting selected
    7731 // on the option
    7732 // The getter ensures a default option is selected
    7733 // when in an optgroup
    7734 // eslint rule "no-unused-expressions" is disabled for this code
    7735 // since it considers such accessions noop
    7736 if ( !support.optSelected ) {
    7737         jQuery.propHooks.selected = {
    7738                 get: function( elem ) {
    7739 
    7740                         /* eslint no-unused-expressions: "off" */
    7741 
    7742                         var parent = elem.parentNode;
    7743                         if ( parent && parent.parentNode ) {
    7744                                 parent.parentNode.selectedIndex;
    7745                         }
    7746                         return null;
    7747                 },
    7748                 set: function( elem ) {
    7749 
    7750                         /* eslint no-unused-expressions: "off" */
    7751 
    7752                         var parent = elem.parentNode;
    7753                         if ( parent ) {
    7754                                 parent.selectedIndex;
    7755 
    7756                                 if ( parent.parentNode ) {
    7757                                         parent.parentNode.selectedIndex;
    7758                                 }
    7759                         }
    7760                 }
    7761         };
    7762 }
    7763 
    7764 jQuery.each( [
    7765         "tabIndex",
    7766         "readOnly",
    7767         "maxLength",
    7768         "cellSpacing",
    7769         "cellPadding",
    7770         "rowSpan",
    7771         "colSpan",
    7772         "useMap",
    7773         "frameBorder",
    7774         "contentEditable"
    7775 ], function() {
    7776         jQuery.propFix[ this.toLowerCase() ] = this;
    7777 } );
    7778 
    7779 
    7780 
    7781 
    7782         // Strip and collapse whitespace according to HTML spec
    7783         // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
    7784         function stripAndCollapse( value ) {
    7785                 var tokens = value.match( rnothtmlwhite ) || [];
    7786                 return tokens.join( " " );
    7787         }
    7788 
    7789 
    7790 function getClass( elem ) {
    7791         return elem.getAttribute && elem.getAttribute( "class" ) || "";
    7792 }
    7793 
    7794 function classesToArray( value ) {
    7795         if ( Array.isArray( value ) ) {
    7796                 return value;
    7797         }
    7798         if ( typeof value === "string" ) {
    7799                 return value.match( rnothtmlwhite ) || [];
    7800         }
    7801         return [];
    7802 }
    7803 
    7804 jQuery.fn.extend( {
    7805         addClass: function( value ) {
    7806                 var classes, elem, cur, curValue, clazz, j, finalValue,
    7807                         i = 0;
    7808 
    7809                 if ( isFunction( value ) ) {
    7810                         return this.each( function( j ) {
    7811                                 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
    7812                         } );
    7813                 }
    7814 
    7815                 classes = classesToArray( value );
    7816 
    7817                 if ( classes.length ) {
    7818                         while ( ( elem = this[ i++ ] ) ) {
    7819                                 curValue = getClass( elem );
    7820                                 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
    7821 
    7822                                 if ( cur ) {
    7823                                         j = 0;
    7824                                         while ( ( clazz = classes[ j++ ] ) ) {
    7825                                                 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
    7826                                                         cur += clazz + " ";
    7827                                                 }
    7828                                         }
    7829 
    7830                                         // Only assign if different to avoid unneeded rendering.
    7831                                         finalValue = stripAndCollapse( cur );
    7832                                         if ( curValue !== finalValue ) {
    7833                                                 elem.setAttribute( "class", finalValue );
    7834                                         }
    7835                                 }
    7836                         }
    7837                 }
    7838 
    7839                 return this;
    7840         },
    7841 
    7842         removeClass: function( value ) {
    7843                 var classes, elem, cur, curValue, clazz, j, finalValue,
    7844                         i = 0;
    7845 
    7846                 if ( isFunction( value ) ) {
    7847                         return this.each( function( j ) {
    7848                                 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
    7849                         } );
    7850                 }
    7851 
    7852                 if ( !arguments.length ) {
    7853                         return this.attr( "class", "" );
    7854                 }
    7855 
    7856                 classes = classesToArray( value );
    7857 
    7858                 if ( classes.length ) {
    7859                         while ( ( elem = this[ i++ ] ) ) {
    7860                                 curValue = getClass( elem );
    7861 
    7862                                 // This expression is here for better compressibility (see addClass)
    7863                                 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
    7864 
    7865                                 if ( cur ) {
    7866                                         j = 0;
    7867                                         while ( ( clazz = classes[ j++ ] ) ) {
    7868 
    7869                                                 // Remove *all* instances
    7870                                                 while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
    7871                                                         cur = cur.replace( " " + clazz + " ", " " );
    7872                                                 }
    7873                                         }
    7874 
    7875                                         // Only assign if different to avoid unneeded rendering.
    7876                                         finalValue = stripAndCollapse( cur );
    7877                                         if ( curValue !== finalValue ) {
    7878                                                 elem.setAttribute( "class", finalValue );
    7879                                         }
    7880                                 }
    7881                         }
    7882                 }
    7883 
    7884                 return this;
    7885         },
    7886 
    7887         toggleClass: function( value, stateVal ) {
    7888                 var type = typeof value,
    7889                         isValidValue = type === "string" || Array.isArray( value );
    7890 
    7891                 if ( typeof stateVal === "boolean" && isValidValue ) {
    7892                         return stateVal ? this.addClass( value ) : this.removeClass( value );
    7893                 }
    7894 
    7895                 if ( isFunction( value ) ) {
    7896                         return this.each( function( i ) {
    7897                                 jQuery( this ).toggleClass(
    7898                                         value.call( this, i, getClass( this ), stateVal ),
    7899                                         stateVal
    7900                                 );
    7901                         } );
    7902                 }
    7903 
    7904                 return this.each( function() {
    7905                         var className, i, self, classNames;
    7906 
    7907                         if ( isValidValue ) {
    7908 
    7909                                 // Toggle individual class names
    7910                                 i = 0;
    7911                                 self = jQuery( this );
    7912                                 classNames = classesToArray( value );
    7913 
    7914                                 while ( ( className = classNames[ i++ ] ) ) {
    7915 
    7916                                         // Check each className given, space separated list
    7917                                         if ( self.hasClass( className ) ) {
    7918                                                 self.removeClass( className );
    7919                                         } else {
    7920                                                 self.addClass( className );
    7921                                         }
    7922                                 }
    7923 
    7924                         // Toggle whole class name
    7925                         } else if ( value === undefined || type === "boolean" ) {
    7926                                 className = getClass( this );
    7927                                 if ( className ) {
    7928 
    7929                                         // Store className if set
    7930                                         dataPriv.set( this, "__className__", className );
    7931                                 }
    7932 
    7933                                 // If the element has a class name or if we're passed `false`,
    7934                                 // then remove the whole classname (if there was one, the above saved it).
    7935                                 // Otherwise bring back whatever was previously saved (if anything),
    7936                                 // falling back to the empty string if nothing was stored.
    7937                                 if ( this.setAttribute ) {
    7938                                         this.setAttribute( "class",
    7939                                                 className || value === false ?
    7940                                                 "" :
    7941                                                 dataPriv.get( this, "__className__" ) || ""
    7942                                         );
    7943                                 }
    7944                         }
    7945                 } );
    7946         },
    7947 
    7948         hasClass: function( selector ) {
    7949                 var className, elem,
    7950                         i = 0;
    7951 
    7952                 className = " " + selector + " ";
    7953                 while ( ( elem = this[ i++ ] ) ) {
    7954                         if ( elem.nodeType === 1 &&
    7955                                 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
    7956                                         return true;
    7957                         }
    7958                 }
    7959 
    7960                 return false;
    7961         }
    7962 } );
    7963 
    7964 
    7965 
    7966 
    7967 var rreturn = /\r/g;
    7968 
    7969 jQuery.fn.extend( {
    7970         val: function( value ) {
    7971                 var hooks, ret, valueIsFunction,
    7972                         elem = this[ 0 ];
    7973 
    7974                 if ( !arguments.length ) {
    7975                         if ( elem ) {
    7976                                 hooks = jQuery.valHooks[ elem.type ] ||
    7977                                         jQuery.valHooks[ elem.nodeName.toLowerCase() ];
    7978 
    7979                                 if ( hooks &&
    7980                                         "get" in hooks &&
    7981                                         ( ret = hooks.get( elem, "value" ) ) !== undefined
    7982                                 ) {
    7983                                         return ret;
    7984                                 }
    7985 
    7986                                 ret = elem.value;
    7987 
    7988                                 // Handle most common string cases
    7989                                 if ( typeof ret === "string" ) {
    7990                                         return ret.replace( rreturn, "" );
    7991                                 }
    7992 
    7993                                 // Handle cases where value is null/undef or number
    7994                                 return ret == null ? "" : ret;
    7995                         }
    7996 
    7997                         return;
    7998                 }
    7999 
    8000                 valueIsFunction = isFunction( value );
    8001 
    8002                 return this.each( function( i ) {
    8003                         var val;
    8004 
    8005                         if ( this.nodeType !== 1 ) {
    8006                                 return;
    8007                         }
    8008 
    8009                         if ( valueIsFunction ) {
    8010                                 val = value.call( this, i, jQuery( this ).val() );
    8011                         } else {
    8012                                 val = value;
    8013                         }
    8014 
    8015                         // Treat null/undefined as ""; convert numbers to string
    8016                         if ( val == null ) {
    8017                                 val = "";
    8018 
    8019                         } else if ( typeof val === "number" ) {
    8020                                 val += "";
    8021 
    8022                         } else if ( Array.isArray( val ) ) {
    8023                                 val = jQuery.map( val, function( value ) {
    8024                                         return value == null ? "" : value + "";
    8025                                 } );
    8026                         }
    8027 
    8028                         hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
    8029 
    8030                         // If set returns undefined, fall back to normal setting
    8031                         if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
    8032                                 this.value = val;
    8033                         }
    8034                 } );
    8035         }
    8036 } );
    8037 
    8038 jQuery.extend( {
    8039         valHooks: {
    8040                 option: {
    8041                         get: function( elem ) {
    8042 
    8043                                 var val = jQuery.find.attr( elem, "value" );
    8044                                 return val != null ?
    8045                                         val :
    8046 
    8047                                         // Support: IE <=10 - 11 only
    8048                                         // option.text throws exceptions (#14686, #14858)
    8049                                         // Strip and collapse whitespace
    8050                                         // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
    8051                                         stripAndCollapse( jQuery.text( elem ) );
    8052                         }
    8053                 },
    8054                 select: {
    8055                         get: function( elem ) {
    8056                                 var value, option, i,
    8057                                         options = elem.options,
    8058                                         index = elem.selectedIndex,
    8059                                         one = elem.type === "select-one",
    8060                                         values = one ? null : [],
    8061                                         max = one ? index + 1 : options.length;
    8062 
    8063                                 if ( index < 0 ) {
    8064                                         i = max;
    8065 
    8066                                 } else {
    8067                                         i = one ? index : 0;
    8068                                 }
    8069 
    8070                                 // Loop through all the selected options
    8071                                 for ( ; i < max; i++ ) {
    8072                                         option = options[ i ];
    8073 
    8074                                         // Support: IE <=9 only
    8075                                         // IE8-9 doesn't update selected after form reset (#2551)
    8076                                         if ( ( option.selected || i === index ) &&
    8077 
    8078                                                         // Don't return options that are disabled or in a disabled optgroup
    8079                                                         !option.disabled &&
    8080                                                         ( !option.parentNode.disabled ||
    8081                                                                 !nodeName( option.parentNode, "optgroup" ) ) ) {
    8082 
    8083                                                 // Get the specific value for the option
    8084                                                 value = jQuery( option ).val();
    8085 
    8086                                                 // We don't need an array for one selects
    8087                                                 if ( one ) {
    8088                                                         return value;
    8089                                                 }
    8090 
    8091                                                 // Multi-Selects return an array
    8092                                                 values.push( value );
    8093                                         }
    8094                                 }
    8095 
    8096                                 return values;
    8097                         },
    8098 
    8099                         set: function( elem, value ) {
    8100                                 var optionSet, option,
    8101                                         options = elem.options,
    8102                                         values = jQuery.makeArray( value ),
    8103                                         i = options.length;
    8104 
    8105                                 while ( i-- ) {
    8106                                         option = options[ i ];
    8107 
    8108                                         /* eslint-disable no-cond-assign */
    8109 
    8110                                         if ( option.selected =
    8111                                                 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
    8112                                         ) {
    8113                                                 optionSet = true;
    8114                                         }
    8115 
    8116                                         /* eslint-enable no-cond-assign */
    8117                                 }
    8118 
    8119                                 // Force browsers to behave consistently when non-matching value is set
    8120                                 if ( !optionSet ) {
    8121                                         elem.selectedIndex = -1;
    8122                                 }
    8123                                 return values;
    8124                         }
    8125                 }
    8126         }
    8127 } );
    8128 
    8129 // Radios and checkboxes getter/setter
    8130 jQuery.each( [ "radio", "checkbox" ], function() {
    8131         jQuery.valHooks[ this ] = {
    8132                 set: function( elem, value ) {
    8133                         if ( Array.isArray( value ) ) {
    8134                                 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
    8135                         }
    8136                 }
    8137         };
    8138         if ( !support.checkOn ) {
    8139                 jQuery.valHooks[ this ].get = function( elem ) {
    8140                         return elem.getAttribute( "value" ) === null ? "on" : elem.value;
    8141                 };
    8142         }
    8143 } );
    8144 
    8145 
    8146 
    8147 
    8148 // Return jQuery for attributes-only inclusion
    8149 
    8150 
    8151 support.focusin = "onfocusin" in window;
    8152 
    8153 
    8154 var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
    8155         stopPropagationCallback = function( e ) {
    8156                 e.stopPropagation();
    8157         };
    8158 
    8159 jQuery.extend( jQuery.event, {
    8160 
    8161         trigger: function( event, data, elem, onlyHandlers ) {
    8162 
    8163                 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
    8164                         eventPath = [ elem || document ],
    8165                         type = hasOwn.call( event, "type" ) ? event.type : event,
    8166                         namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
    8167 
    8168                 cur = lastElement = tmp = elem = elem || document;
    8169 
    8170                 // Don't do events on text and comment nodes
    8171                 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
    8172                         return;
    8173                 }
    8174 
    8175                 // focus/blur morphs to focusin/out; ensure we're not firing them right now
    8176                 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
    8177                         return;
    8178                 }
    8179 
    8180                 if ( type.indexOf( "." ) > -1 ) {
    8181 
    8182                         // Namespaced trigger; create a regexp to match event type in handle()
    8183                         namespaces = type.split( "." );
    8184                         type = namespaces.shift();
    8185                         namespaces.sort();
    8186                 }
    8187                 ontype = type.indexOf( ":" ) < 0 && "on" + type;
    8188 
    8189                 // Caller can pass in a jQuery.Event object, Object, or just an event type string
    8190                 event = event[ jQuery.expando ] ?
    8191                         event :
    8192                         new jQuery.Event( type, typeof event === "object" && event );
    8193 
    8194                 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
    8195                 event.isTrigger = onlyHandlers ? 2 : 3;
    8196                 event.namespace = namespaces.join( "." );
    8197                 event.rnamespace = event.namespace ?
    8198                         new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
    8199                         null;
    8200 
    8201                 // Clean up the event in case it is being reused
    8202                 event.result = undefined;
    8203                 if ( !event.target ) {
    8204                         event.target = elem;
    8205                 }
    8206 
    8207                 // Clone any incoming data and prepend the event, creating the handler arg list
    8208                 data = data == null ?
    8209                         [ event ] :
    8210                         jQuery.makeArray( data, [ event ] );
    8211 
    8212                 // Allow special events to draw outside the lines
    8213                 special = jQuery.event.special[ type ] || {};
    8214                 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
    8215                         return;
    8216                 }
    8217 
    8218                 // Determine event propagation path in advance, per W3C events spec (#9951)
    8219                 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
    8220                 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
    8221 
    8222                         bubbleType = special.delegateType || type;
    8223                         if ( !rfocusMorph.test( bubbleType + type ) ) {
    8224                                 cur = cur.parentNode;
    8225                         }
    8226                         for ( ; cur; cur = cur.parentNode ) {
    8227                                 eventPath.push( cur );
    8228                                 tmp = cur;
    8229                         }
    8230 
    8231                         // Only add window if we got to document (e.g., not plain obj or detached DOM)
    8232                         if ( tmp === ( elem.ownerDocument || document ) ) {
    8233                                 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
    8234                         }
    8235                 }
    8236 
    8237                 // Fire handlers on the event path
    8238                 i = 0;
    8239                 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
    8240                         lastElement = cur;
    8241                         event.type = i > 1 ?
    8242                                 bubbleType :
    8243                                 special.bindType || type;
    8244 
    8245                         // jQuery handler
    8246                         handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
    8247                                 dataPriv.get( cur, "handle" );
    8248                         if ( handle ) {
    8249                                 handle.apply( cur, data );
    8250                         }
    8251 
    8252                         // Native handler
    8253                         handle = ontype && cur[ ontype ];
    8254                         if ( handle && handle.apply && acceptData( cur ) ) {
    8255                                 event.result = handle.apply( cur, data );
    8256                                 if ( event.result === false ) {
    8257                                         event.preventDefault();
    8258                                 }
    8259                         }
    8260                 }
    8261                 event.type = type;
    8262 
    8263                 // If nobody prevented the default action, do it now
    8264                 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
    8265 
    8266                         if ( ( !special._default ||
    8267                                 special._default.apply( eventPath.pop(), data ) === false ) &&
    8268                                 acceptData( elem ) ) {
    8269 
    8270                                 // Call a native DOM method on the target with the same name as the event.
    8271                                 // Don't do default actions on window, that's where global variables be (#6170)
    8272                                 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
    8273 
    8274                                         // Don't re-trigger an onFOO event when we call its FOO() method
    8275                                         tmp = elem[ ontype ];
    8276 
    8277                                         if ( tmp ) {
    8278                                                 elem[ ontype ] = null;
    8279                                         }
    8280 
    8281                                         // Prevent re-triggering of the same event, since we already bubbled it above
    8282                                         jQuery.event.triggered = type;
    8283 
    8284                                         if ( event.isPropagationStopped() ) {
    8285                                                 lastElement.addEventListener( type, stopPropagationCallback );
    8286                                         }
    8287 
    8288                                         elem[ type ]();
    8289 
    8290                                         if ( event.isPropagationStopped() ) {
    8291                                                 lastElement.removeEventListener( type, stopPropagationCallback );
    8292                                         }
    8293 
    8294                                         jQuery.event.triggered = undefined;
    8295 
    8296                                         if ( tmp ) {
    8297                                                 elem[ ontype ] = tmp;
    8298                                         }
    8299                                 }
    8300                         }
    8301                 }
    8302 
    8303                 return event.result;
    8304         },
    8305 
    8306         // Piggyback on a donor event to simulate a different one
    8307         // Used only for `focus(in | out)` events
    8308         simulate: function( type, elem, event ) {
    8309                 var e = jQuery.extend(
    8310                         new jQuery.Event(),
    8311                         event,
    8312                         {
    8313                                 type: type,
    8314                                 isSimulated: true
    8315                         }
    8316                 );
    8317 
    8318                 jQuery.event.trigger( e, null, elem );
    8319         }
    8320 
    8321 } );
    8322 
    8323 jQuery.fn.extend( {
    8324 
    8325         trigger: function( type, data ) {
    8326                 return this.each( function() {
    8327                         jQuery.event.trigger( type, data, this );
    8328                 } );
    8329         },
    8330         triggerHandler: function( type, data ) {
    8331                 var elem = this[ 0 ];
    8332                 if ( elem ) {
    8333                         return jQuery.event.trigger( type, data, elem, true );
    8334                 }
    8335         }
    8336 } );
    8337 
    8338 
    8339 // Support: Firefox <=44
    8340 // Firefox doesn't have focus(in | out) events
    8341 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
    8342 //
    8343 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
    8344 // focus(in | out) events fire after focus & blur events,
    8345 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
    8346 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
    8347 if ( !support.focusin ) {
    8348         jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
    8349 
    8350                 // Attach a single capturing handler on the document while someone wants focusin/focusout
    8351                 var handler = function( event ) {
    8352                         jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
    8353                 };
    8354 
    8355                 jQuery.event.special[ fix ] = {
    8356                         setup: function() {
    8357                                 var doc = this.ownerDocument || this,
    8358                                         attaches = dataPriv.access( doc, fix );
    8359 
    8360                                 if ( !attaches ) {
    8361                                         doc.addEventListener( orig, handler, true );
    8362                                 }
    8363                                 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
    8364                         },
    8365                         teardown: function() {
    8366                                 var doc = this.ownerDocument || this,
    8367                                         attaches = dataPriv.access( doc, fix ) - 1;
    8368 
    8369                                 if ( !attaches ) {
    8370                                         doc.removeEventListener( orig, handler, true );
    8371                                         dataPriv.remove( doc, fix );
    8372 
    8373                                 } else {
    8374                                         dataPriv.access( doc, fix, attaches );
    8375                                 }
    8376                         }
    8377                 };
    8378         } );
    8379 }
    8380 var location = window.location;
    8381 
    8382 var nonce = Date.now();
    8383 
    8384 var rquery = ( /\?/ );
    8385 
    8386 
    8387 
    8388 // Cross-browser xml parsing
    8389 jQuery.parseXML = function( data ) {
    8390         var xml;
    8391         if ( !data || typeof data !== "string" ) {
    8392                 return null;
    8393         }
    8394 
    8395         // Support: IE 9 - 11 only
    8396         // IE throws on parseFromString with invalid input.
    8397         try {
    8398                 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
    8399         } catch ( e ) {
    8400                 xml = undefined;
    8401         }
    8402 
    8403         if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
    8404                 jQuery.error( "Invalid XML: " + data );
    8405         }
    8406         return xml;
    8407 };
    8408 
    8409 
    8410 var
    8411         rbracket = /\[\]$/,
    8412         rCRLF = /\r?\n/g,
    8413         rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
    8414         rsubmittable = /^(?:input|select|textarea|keygen)/i;
    8415 
    8416 function buildParams( prefix, obj, traditional, add ) {
    8417         var name;
    8418 
    8419         if ( Array.isArray( obj ) ) {
    8420 
    8421                 // Serialize array item.
    8422                 jQuery.each( obj, function( i, v ) {
    8423                         if ( traditional || rbracket.test( prefix ) ) {
    8424 
    8425                                 // Treat each array item as a scalar.
    8426                                 add( prefix, v );
    8427 
    8428                         } else {
    8429 
    8430                                 // Item is non-scalar (array or object), encode its numeric index.
    8431                                 buildParams(
    8432                                         prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
    8433                                         v,
    8434                                         traditional,
    8435                                         add
    8436                                 );
    8437                         }
    8438                 } );
    8439 
    8440         } else if ( !traditional && toType( obj ) === "object" ) {
    8441 
    8442                 // Serialize object item.
    8443                 for ( name in obj ) {
    8444                         buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
    8445                 }
    8446 
    8447         } else {
    8448 
    8449                 // Serialize scalar item.
    8450                 add( prefix, obj );
    8451         }
    8452 }
    8453 
    8454 // Serialize an array of form elements or a set of
    8455 // key/values into a query string
    8456 jQuery.param = function( a, traditional ) {
    8457         var prefix,
    8458                 s = [],
    8459                 add = function( key, valueOrFunction ) {
    8460 
    8461                         // If value is a function, invoke it and use its return value
    8462                         var value = isFunction( valueOrFunction ) ?
    8463                                 valueOrFunction() :
    8464                                 valueOrFunction;
    8465 
    8466                         s[ s.length ] = encodeURIComponent( key ) + "=" +
    8467                                 encodeURIComponent( value == null ? "" : value );
    8468                 };
    8469 
    8470         // If an array was passed in, assume that it is an array of form elements.
    8471         if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
    8472 
    8473                 // Serialize the form elements
    8474                 jQuery.each( a, function() {
    8475                         add( this.name, this.value );
    8476                 } );
    8477 
    8478         } else {
    8479 
    8480                 // If traditional, encode the "old" way (the way 1.3.2 or older
    8481                 // did it), otherwise encode params recursively.
    8482                 for ( prefix in a ) {
    8483                         buildParams( prefix, a[ prefix ], traditional, add );
    8484                 }
    8485         }
    8486 
    8487         // Return the resulting serialization
    8488         return s.join( "&" );
    8489 };
    8490 
    8491 jQuery.fn.extend( {
    8492         serialize: function() {
    8493                 return jQuery.param( this.serializeArray() );
    8494         },
    8495         serializeArray: function() {
    8496                 return this.map( function() {
    8497 
    8498                         // Can add propHook for "elements" to filter or add form elements
    8499                         var elements = jQuery.prop( this, "elements" );
    8500                         return elements ? jQuery.makeArray( elements ) : this;
    8501                 } )
    8502                 .filter( function() {
    8503                         var type = this.type;
    8504 
    8505                         // Use .is( ":disabled" ) so that fieldset[disabled] works
    8506                         return this.name && !jQuery( this ).is( ":disabled" ) &&
    8507                                 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
    8508                                 ( this.checked || !rcheckableType.test( type ) );
    8509                 } )
    8510                 .map( function( i, elem ) {
    8511                         var val = jQuery( this ).val();
    8512 
    8513                         if ( val == null ) {
    8514                                 return null;
    8515                         }
    8516 
    8517                         if ( Array.isArray( val ) ) {
    8518                                 return jQuery.map( val, function( val ) {
    8519                                         return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
    8520                                 } );
    8521                         }
    8522 
    8523                         return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
    8524                 } ).get();
    8525         }
    8526 } );
    8527 
    8528 
    8529 var
    8530         r20 = /%20/g,
    8531         rhash = /#.*$/,
    8532         rantiCache = /([?&])_=[^&]*/,
    8533         rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
    8534 
    8535         // #7653, #8125, #8152: local protocol detection
    8536         rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
    8537         rnoContent = /^(?:GET|HEAD)$/,
    8538         rprotocol = /^\/\//,
    8539 
    8540         /* Prefilters
    8541          * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
    8542          * 2) These are called:
    8543          *    - BEFORE asking for a transport
    8544          *    - AFTER param serialization (s.data is a string if s.processData is true)
    8545          * 3) key is the dataType
    8546          * 4) the catchall symbol "*" can be used
    8547          * 5) execution will start with transport dataType and THEN continue down to "*" if needed
    8548          */
    8549         prefilters = {},
    8550 
    8551         /* Transports bindings
    8552          * 1) key is the dataType
    8553          * 2) the catchall symbol "*" can be used
    8554          * 3) selection will start with transport dataType and THEN go to "*" if needed
    8555          */
    8556         transports = {},
    8557 
    8558         // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
    8559         allTypes = "*/".concat( "*" ),
    8560 
    8561         // Anchor tag for parsing the document origin
    8562         originAnchor = document.createElement( "a" );
    8563         originAnchor.href = location.href;
    8564 
    8565 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
    8566 function addToPrefiltersOrTransports( structure ) {
    8567 
    8568         // dataTypeExpression is optional and defaults to "*"
    8569         return function( dataTypeExpression, func ) {
    8570 
    8571                 if ( typeof dataTypeExpression !== "string" ) {
    8572                         func = dataTypeExpression;
    8573                         dataTypeExpression = "*";
    8574                 }
    8575 
    8576                 var dataType,
    8577                         i = 0,
    8578                         dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
    8579 
    8580                 if ( isFunction( func ) ) {
    8581 
    8582                         // For each dataType in the dataTypeExpression
    8583                         while ( ( dataType = dataTypes[ i++ ] ) ) {
    8584 
    8585                                 // Prepend if requested
    8586                                 if ( dataType[ 0 ] === "+" ) {
    8587                                         dataType = dataType.slice( 1 ) || "*";
    8588                                         ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
    8589 
    8590                                 // Otherwise append
    8591                                 } else {
    8592                                         ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
    8593                                 }
    8594                         }
    8595                 }
    8596         };
    8597 }
    8598 
    8599 // Base inspection function for prefilters and transports
    8600 function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
    8601 
    8602         var inspected = {},
    8603                 seekingTransport = ( structure === transports );
    8604 
    8605         function inspect( dataType ) {
    8606                 var selected;
    8607                 inspected[ dataType ] = true;
    8608                 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
    8609                         var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
    8610                         if ( typeof dataTypeOrTransport === "string" &&
    8611                                 !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
    8612 
    8613                                 options.dataTypes.unshift( dataTypeOrTransport );
    8614                                 inspect( dataTypeOrTransport );
    8615                                 return false;
    8616                         } else if ( seekingTransport ) {
    8617                                 return !( selected = dataTypeOrTransport );
    8618                         }
    8619                 } );
    8620                 return selected;
    8621         }
    8622 
    8623         return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
    8624 }
    8625 
    8626 // A special extend for ajax options
    8627 // that takes "flat" options (not to be deep extended)
    8628 // Fixes #9887
    8629 function ajaxExtend( target, src ) {
    8630         var key, deep,
    8631                 flatOptions = jQuery.ajaxSettings.flatOptions || {};
    8632 
    8633         for ( key in src ) {
    8634                 if ( src[ key ] !== undefined ) {
    8635                         ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
    8636                 }
    8637         }
    8638         if ( deep ) {
    8639                 jQuery.extend( true, target, deep );
    8640         }
    8641 
    8642         return target;
    8643 }
    8644 
    8645 /* Handles responses to an ajax request:
    8646  * - finds the right dataType (mediates between content-type and expected dataType)
    8647  * - returns the corresponding response
    8648  */
    8649 function ajaxHandleResponses( s, jqXHR, responses ) {
    8650 
    8651         var ct, type, finalDataType, firstDataType,
    8652                 contents = s.contents,
    8653                 dataTypes = s.dataTypes;
    8654 
    8655         // Remove auto dataType and get content-type in the process
    8656         while ( dataTypes[ 0 ] === "*" ) {
    8657                 dataTypes.shift();
    8658                 if ( ct === undefined ) {
    8659                         ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
    8660                 }
    8661         }
    8662 
    8663         // Check if we're dealing with a known content-type
    8664         if ( ct ) {
    8665                 for ( type in contents ) {
    8666                         if ( contents[ type ] && contents[ type ].test( ct ) ) {
    8667                                 dataTypes.unshift( type );
    8668                                 break;
    8669                         }
    8670                 }
    8671         }
    8672 
    8673         // Check to see if we have a response for the expected dataType
    8674         if ( dataTypes[ 0 ] in responses ) {
    8675                 finalDataType = dataTypes[ 0 ];
    8676         } else {
    8677 
    8678                 // Try convertible dataTypes
    8679                 for ( type in responses ) {
    8680                         if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
    8681                                 finalDataType = type;
    8682                                 break;
    8683                         }
    8684                         if ( !firstDataType ) {
    8685                                 firstDataType = type;
    8686                         }
    8687                 }
    8688 
    8689                 // Or just use first one
    8690                 finalDataType = finalDataType || firstDataType;
    8691         }
    8692 
    8693         // If we found a dataType
    8694         // We add the dataType to the list if needed
    8695         // and return the corresponding response
    8696         if ( finalDataType ) {
    8697                 if ( finalDataType !== dataTypes[ 0 ] ) {
    8698                         dataTypes.unshift( finalDataType );
    8699                 }
    8700                 return responses[ finalDataType ];
    8701         }
    8702 }
    8703 
    8704 /* Chain conversions given the request and the original response
    8705  * Also sets the responseXXX fields on the jqXHR instance
    8706  */
    8707 function ajaxConvert( s, response, jqXHR, isSuccess ) {
    8708         var conv2, current, conv, tmp, prev,
    8709                 converters = {},
    8710 
    8711                 // Work with a copy of dataTypes in case we need to modify it for conversion
    8712                 dataTypes = s.dataTypes.slice();
    8713 
    8714         // Create converters map with lowercased keys
    8715         if ( dataTypes[ 1 ] ) {
    8716                 for ( conv in s.converters ) {
    8717                         converters[ conv.toLowerCase() ] = s.converters[ conv ];
    8718                 }
    8719         }
    8720 
    8721         current = dataTypes.shift();
    8722 
    8723         // Convert to each sequential dataType
    8724         while ( current ) {
    8725 
    8726                 if ( s.responseFields[ current ] ) {
    8727                         jqXHR[ s.responseFields[ current ] ] = response;
    8728                 }
    8729 
    8730                 // Apply the dataFilter if provided
    8731                 if ( !prev && isSuccess && s.dataFilter ) {
    8732                         response = s.dataFilter( response, s.dataType );
    8733                 }
    8734 
    8735                 prev = current;
    8736                 current = dataTypes.shift();
    8737 
    8738                 if ( current ) {
    8739 
    8740                         // There's only work to do if current dataType is non-auto
    8741                         if ( current === "*" ) {
    8742 
    8743                                 current = prev;
    8744 
    8745                         // Convert response if prev dataType is non-auto and differs from current
    8746                         } else if ( prev !== "*" && prev !== current ) {
    8747 
    8748                                 // Seek a direct converter
    8749                                 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
    8750 
    8751                                 // If none found, seek a pair
    8752                                 if ( !conv ) {
    8753                                         for ( conv2 in converters ) {
    8754 
    8755                                                 // If conv2 outputs current
    8756                                                 tmp = conv2.split( " " );
    8757                                                 if ( tmp[ 1 ] === current ) {
    8758 
    8759                                                         // If prev can be converted to accepted input
    8760                                                         conv = converters[ prev + " " + tmp[ 0 ] ] ||
    8761                                                                 converters[ "* " + tmp[ 0 ] ];
    8762                                                         if ( conv ) {
    8763 
    8764                                                                 // Condense equivalence converters
    8765                                                                 if ( conv === true ) {
    8766                                                                         conv = converters[ conv2 ];
    8767 
    8768                                                                 // Otherwise, insert the intermediate dataType
    8769                                                                 } else if ( converters[ conv2 ] !== true ) {
    8770                                                                         current = tmp[ 0 ];
    8771                                                                         dataTypes.unshift( tmp[ 1 ] );
    8772                                                                 }
    8773                                                                 break;
    8774                                                         }
    8775                                                 }
    8776                                         }
    8777                                 }
    8778 
    8779                                 // Apply converter (if not an equivalence)
    8780                                 if ( conv !== true ) {
    8781 
    8782                                         // Unless errors are allowed to bubble, catch and return them
    8783                                         if ( conv && s.throws ) {
    8784                                                 response = conv( response );
    8785                                         } else {
    8786                                                 try {
    8787                                                         response = conv( response );
    8788                                                 } catch ( e ) {
    8789                                                         return {
    8790                                                                 state: "parsererror",
    8791                                                                 error: conv ? e : "No conversion from " + prev + " to " + current
    8792                                                         };
    8793                                                 }
    8794                                         }
    8795                                 }
    8796                         }
    8797                 }
    8798         }
    8799 
    8800         return { state: "success", data: response };
    8801 }
    8802 
    8803 jQuery.extend( {
    8804 
    8805         // Counter for holding the number of active queries
    8806         active: 0,
    8807 
    8808         // Last-Modified header cache for next request
    8809         lastModified: {},
    8810         etag: {},
    8811 
    8812         ajaxSettings: {
    8813                 url: location.href,
    8814                 type: "GET",
    8815                 isLocal: rlocalProtocol.test( location.protocol ),
    8816                 global: true,
    8817                 processData: true,
    8818                 async: true,
    8819                 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    8820 
    8821                 /*
    8822                 timeout: 0,
    8823                 data: null,
    8824                 dataType: null,
    8825                 username: null,
    8826                 password: null,
    8827                 cache: null,
    8828                 throws: false,
    8829                 traditional: false,
    8830                 headers: {},
    8831                 */
    8832 
    8833                 accepts: {
    8834                         "*": allTypes,
    8835                         text: "text/plain",
    8836                         html: "text/html",
    8837                         xml: "application/xml, text/xml",
    8838                         json: "application/json, text/javascript"
    8839                 },
    8840 
    8841                 contents: {
    8842                         xml: /\bxml\b/,
    8843                         html: /\bhtml/,
    8844                         json: /\bjson\b/
    8845                 },
    8846 
    8847                 responseFields: {
    8848                         xml: "responseXML",
    8849                         text: "responseText",
    8850                         json: "responseJSON"
    8851                 },
    8852 
    8853                 // Data converters
    8854                 // Keys separate source (or catchall "*") and destination types with a single space
    8855                 converters: {
    8856 
    8857                         // Convert anything to text
    8858                         "* text": String,
    8859 
    8860                         // Text to html (true = no transformation)
    8861                         "text html": true,
    8862 
    8863                         // Evaluate text as a json expression
    8864                         "text json": JSON.parse,
    8865 
    8866                         // Parse text as xml
    8867                         "text xml": jQuery.parseXML
    8868                 },
    8869 
    8870                 // For options that shouldn't be deep extended:
    8871                 // you can add your own custom options here if
    8872                 // and when you create one that shouldn't be
    8873                 // deep extended (see ajaxExtend)
    8874                 flatOptions: {
    8875                         url: true,
    8876                         context: true
    8877                 }
    8878         },
    8879 
    8880         // Creates a full fledged settings object into target
    8881         // with both ajaxSettings and settings fields.
    8882         // If target is omitted, writes into ajaxSettings.
    8883         ajaxSetup: function( target, settings ) {
    8884                 return settings ?
    8885 
    8886                         // Building a settings object
    8887                         ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
    8888 
    8889                         // Extending ajaxSettings
    8890                         ajaxExtend( jQuery.ajaxSettings, target );
    8891         },
    8892 
    8893         ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
    8894         ajaxTransport: addToPrefiltersOrTransports( transports ),
    8895 
    8896         // Main method
    8897         ajax: function( url, options ) {
    8898 
    8899                 // If url is an object, simulate pre-1.5 signature
    8900                 if ( typeof url === "object" ) {
    8901                         options = url;
    8902                         url = undefined;
    8903                 }
    8904 
    8905                 // Force options to be an object
    8906                 options = options || {};
    8907 
    8908                 var transport,
    8909 
    8910                         // URL without anti-cache param
    8911                         cacheURL,
    8912 
    8913                         // Response headers
    8914                         responseHeadersString,
    8915                         responseHeaders,
    8916 
    8917                         // timeout handle
    8918                         timeoutTimer,
    8919 
    8920                         // Url cleanup var
    8921                         urlAnchor,
    8922 
    8923                         // Request state (becomes false upon send and true upon completion)
    8924                         completed,
    8925 
    8926                         // To know if global events are to be dispatched
    8927                         fireGlobals,
    8928 
    8929                         // Loop variable
    8930                         i,
    8931 
    8932                         // uncached part of the url
    8933                         uncached,
    8934 
    8935                         // Create the final options object
    8936                         s = jQuery.ajaxSetup( {}, options ),
    8937 
    8938                         // Callbacks context
    8939                         callbackContext = s.context || s,
    8940 
    8941                         // Context for global events is callbackContext if it is a DOM node or jQuery collection
    8942                         globalEventContext = s.context &&
    8943                                 ( callbackContext.nodeType || callbackContext.jquery ) ?
    8944                                         jQuery( callbackContext ) :
    8945                                         jQuery.event,
    8946 
    8947                         // Deferreds
    8948                         deferred = jQuery.Deferred(),
    8949                         completeDeferred = jQuery.Callbacks( "once memory" ),
    8950 
    8951                         // Status-dependent callbacks
    8952                         statusCode = s.statusCode || {},
    8953 
    8954                         // Headers (they are sent all at once)
    8955                         requestHeaders = {},
    8956                         requestHeadersNames = {},
    8957 
    8958                         // Default abort message
    8959                         strAbort = "canceled",
    8960 
    8961                         // Fake xhr
    8962                         jqXHR = {
    8963                                 readyState: 0,
    8964 
    8965                                 // Builds headers hashtable if needed
    8966                                 getResponseHeader: function( key ) {
    8967                                         var match;
    8968                                         if ( completed ) {
    8969                                                 if ( !responseHeaders ) {
    8970                                                         responseHeaders = {};
    8971                                                         while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
    8972                                                                 responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
    8973                                                         }
    8974                                                 }
    8975                                                 match = responseHeaders[ key.toLowerCase() ];
    8976                                         }
    8977                                         return match == null ? null : match;
    8978                                 },
    8979 
    8980                                 // Raw string
    8981                                 getAllResponseHeaders: function() {
    8982                                         return completed ? responseHeadersString : null;
    8983                                 },
    8984 
    8985                                 // Caches the header
    8986                                 setRequestHeader: function( name, value ) {
    8987                                         if ( completed == null ) {
    8988                                                 name = requestHeadersNames[ name.toLowerCase() ] =
    8989                                                         requestHeadersNames[ name.toLowerCase() ] || name;
    8990                                                 requestHeaders[ name ] = value;
    8991                                         }
    8992                                         return this;
    8993                                 },
    8994 
    8995                                 // Overrides response content-type header
    8996                                 overrideMimeType: function( type ) {
    8997                                         if ( completed == null ) {
    8998                                                 s.mimeType = type;
    8999                                         }
    9000                                         return this;
    9001                                 },
    9002 
    9003                                 // Status-dependent callbacks
    9004                                 statusCode: function( map ) {
    9005                                         var code;
    9006                                         if ( map ) {
    9007                                                 if ( completed ) {
    9008 
    9009                                                         // Execute the appropriate callbacks
    9010                                                         jqXHR.always( map[ jqXHR.status ] );
    9011                                                 } else {
    9012 
    9013                                                         // Lazy-add the new callbacks in a way that preserves old ones
    9014                                                         for ( code in map ) {
    9015                                                                 statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
    9016                                                         }
    9017                                                 }
    9018                                         }
    9019                                         return this;
    9020                                 },
    9021 
    9022                                 // Cancel the request
    9023                                 abort: function( statusText ) {
    9024                                         var finalText = statusText || strAbort;
    9025                                         if ( transport ) {
    9026                                                 transport.abort( finalText );
    9027                                         }
    9028                                         done( 0, finalText );
    9029                                         return this;
    9030                                 }
    9031                         };
    9032 
    9033                 // Attach deferreds
    9034                 deferred.promise( jqXHR );
    9035 
    9036                 // Add protocol if not provided (prefilters might expect it)
    9037                 // Handle falsy url in the settings object (#10093: consistency with old signature)
    9038                 // We also use the url parameter if available
    9039                 s.url = ( ( url || s.url || location.href ) + "" )
    9040                         .replace( rprotocol, location.protocol + "//" );
    9041 
    9042                 // Alias method option to type as per ticket #12004
    9043                 s.type = options.method || options.type || s.method || s.type;
    9044 
    9045                 // Extract dataTypes list
    9046                 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
    9047 
    9048                 // A cross-domain request is in order when the origin doesn't match the current origin.
    9049                 if ( s.crossDomain == null ) {
    9050                         urlAnchor = document.createElement( "a" );
    9051 
    9052                         // Support: IE <=8 - 11, Edge 12 - 15
    9053                         // IE throws exception on accessing the href property if url is malformed,
    9054                         // e.g. http://example.com:80x/
    9055                         try {
    9056                                 urlAnchor.href = s.url;
    9057 
    9058                                 // Support: IE <=8 - 11 only
    9059                                 // Anchor's host property isn't correctly set when s.url is relative
    9060                                 urlAnchor.href = urlAnchor.href;
    9061                                 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
    9062                                         urlAnchor.protocol + "//" + urlAnchor.host;
    9063                         } catch ( e ) {
    9064 
    9065                                 // If there is an error parsing the URL, assume it is crossDomain,
    9066                                 // it can be rejected by the transport if it is invalid
    9067                                 s.crossDomain = true;
    9068                         }
    9069                 }
    9070 
    9071                 // Convert data if not already a string
    9072                 if ( s.data && s.processData && typeof s.data !== "string" ) {
    9073                         s.data = jQuery.param( s.data, s.traditional );
    9074                 }
    9075 
    9076                 // Apply prefilters
    9077                 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
    9078 
    9079                 // If request was aborted inside a prefilter, stop there
    9080                 if ( completed ) {
    9081                         return jqXHR;
    9082                 }
    9083 
    9084                 // We can fire global events as of now if asked to
    9085                 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
    9086                 fireGlobals = jQuery.event && s.global;
    9087 
    9088                 // Watch for a new set of requests
    9089                 if ( fireGlobals && jQuery.active++ === 0 ) {
    9090                         jQuery.event.trigger( "ajaxStart" );
    9091                 }
    9092 
    9093                 // Uppercase the type
    9094                 s.type = s.type.toUpperCase();
    9095 
    9096                 // Determine if request has content
    9097                 s.hasContent = !rnoContent.test( s.type );
    9098 
    9099                 // Save the URL in case we're toying with the If-Modified-Since
    9100                 // and/or If-None-Match header later on
    9101                 // Remove hash to simplify url manipulation
    9102                 cacheURL = s.url.replace( rhash, "" );
    9103 
    9104                 // More options handling for requests with no content
    9105                 if ( !s.hasContent ) {
    9106 
    9107                         // Remember the hash so we can put it back
    9108                         uncached = s.url.slice( cacheURL.length );
    9109 
    9110                         // If data is available and should be processed, append data to url
    9111                         if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
    9112                                 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
    9113 
    9114                                 // #9682: remove data so that it's not used in an eventual retry
    9115                                 delete s.data;
    9116                         }
    9117 
    9118                         // Add or update anti-cache param if needed
    9119                         if ( s.cache === false ) {
    9120                                 cacheURL = cacheURL.replace( rantiCache, "$1" );
    9121                                 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
    9122                         }
    9123 
    9124                         // Put hash and anti-cache on the URL that will be requested (gh-1732)
    9125                         s.url = cacheURL + uncached;
    9126 
    9127                 // Change '%20' to '+' if this is encoded form body content (gh-2658)
    9128                 } else if ( s.data && s.processData &&
    9129                         ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
    9130                         s.data = s.data.replace( r20, "+" );
    9131                 }
    9132 
    9133                 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
    9134                 if ( s.ifModified ) {
    9135                         if ( jQuery.lastModified[ cacheURL ] ) {
    9136                                 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
    9137                         }
    9138                         if ( jQuery.etag[ cacheURL ] ) {
    9139                                 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
    9140                         }
    9141                 }
    9142 
    9143                 // Set the correct header, if data is being sent
    9144                 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
    9145                         jqXHR.setRequestHeader( "Content-Type", s.contentType );
    9146                 }
    9147 
    9148                 // Set the Accepts header for the server, depending on the dataType
    9149                 jqXHR.setRequestHeader(
    9150                         "Accept",
    9151                         s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
    9152                                 s.accepts[ s.dataTypes[ 0 ] ] +
    9153                                         ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
    9154                                 s.accepts[ "*" ]
    9155                 );
    9156 
    9157                 // Check for headers option
    9158                 for ( i in s.headers ) {
    9159                         jqXHR.setRequestHeader( i, s.headers[ i ] );
    9160                 }
    9161 
    9162                 // Allow custom headers/mimetypes and early abort
    9163                 if ( s.beforeSend &&
    9164                         ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
    9165 
    9166                         // Abort if not done already and return
    9167                         return jqXHR.abort();
    9168                 }
    9169 
    9170                 // Aborting is no longer a cancellation
    9171                 strAbort = "abort";
    9172 
    9173                 // Install callbacks on deferreds
    9174                 completeDeferred.add( s.complete );
    9175                 jqXHR.done( s.success );
    9176                 jqXHR.fail( s.error );
    9177 
    9178                 // Get transport
    9179                 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
    9180 
    9181                 // If no transport, we auto-abort
    9182                 if ( !transport ) {
    9183                         done( -1, "No Transport" );
    9184                 } else {
    9185                         jqXHR.readyState = 1;
    9186 
    9187                         // Send global event
    9188                         if ( fireGlobals ) {
    9189                                 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
    9190                         }
    9191 
    9192                         // If request was aborted inside ajaxSend, stop there
    9193                         if ( completed ) {
    9194                                 return jqXHR;
    9195                         }
    9196 
    9197                         // Timeout
    9198                         if ( s.async && s.timeout > 0 ) {
    9199                                 timeoutTimer = window.setTimeout( function() {
    9200                                         jqXHR.abort( "timeout" );
    9201                                 }, s.timeout );
    9202                         }
    9203 
    9204                         try {
    9205                                 completed = false;
    9206                                 transport.send( requestHeaders, done );
    9207                         } catch ( e ) {
    9208 
    9209                                 // Rethrow post-completion exceptions
    9210                                 if ( completed ) {
    9211                                         throw e;
    9212                                 }
    9213 
    9214                                 // Propagate others as results
    9215                                 done( -1, e );
    9216                         }
    9217                 }
    9218 
    9219                 // Callback for when everything is done
    9220                 function done( status, nativeStatusText, responses, headers ) {
    9221                         var isSuccess, success, error, response, modified,
    9222                                 statusText = nativeStatusText;
    9223 
    9224                         // Ignore repeat invocations
    9225                         if ( completed ) {
    9226                                 return;
    9227                         }
    9228 
    9229                         completed = true;
    9230 
    9231                         // Clear timeout if it exists
    9232                         if ( timeoutTimer ) {
    9233                                 window.clearTimeout( timeoutTimer );
    9234                         }
    9235 
    9236                         // Dereference transport for early garbage collection
    9237                         // (no matter how long the jqXHR object will be used)
    9238                         transport = undefined;
    9239 
    9240                         // Cache response headers
    9241                         responseHeadersString = headers || "";
    9242 
    9243                         // Set readyState
    9244                         jqXHR.readyState = status > 0 ? 4 : 0;
    9245 
    9246                         // Determine if successful
    9247                         isSuccess = status >= 200 && status < 300 || status === 304;
    9248 
    9249                         // Get response data
    9250                         if ( responses ) {
    9251                                 response = ajaxHandleResponses( s, jqXHR, responses );
    9252                         }
    9253 
    9254                         // Convert no matter what (that way responseXXX fields are always set)
    9255                         response = ajaxConvert( s, response, jqXHR, isSuccess );
    9256 
    9257                         // If successful, handle type chaining
    9258                         if ( isSuccess ) {
    9259 
    9260                                 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
    9261                                 if ( s.ifModified ) {
    9262                                         modified = jqXHR.getResponseHeader( "Last-Modified" );
    9263                                         if ( modified ) {
    9264                                                 jQuery.lastModified[ cacheURL ] = modified;
    9265                                         }
    9266                                         modified = jqXHR.getResponseHeader( "etag" );
    9267                                         if ( modified ) {
    9268                                                 jQuery.etag[ cacheURL ] = modified;
    9269                                         }
    9270                                 }
    9271 
    9272                                 // if no content
    9273                                 if ( status === 204 || s.type === "HEAD" ) {
    9274                                         statusText = "nocontent";
    9275 
    9276                                 // if not modified
    9277                                 } else if ( status === 304 ) {
    9278                                         statusText = "notmodified";
    9279 
    9280                                 // If we have data, let's convert it
    9281                                 } else {
    9282                                         statusText = response.state;
    9283                                         success = response.data;
    9284                                         error = response.error;
    9285                                         isSuccess = !error;
    9286                                 }
    9287                         } else {
    9288 
    9289                                 // Extract error from statusText and normalize for non-aborts
    9290                                 error = statusText;
    9291                                 if ( status || !statusText ) {
    9292                                         statusText = "error";
    9293                                         if ( status < 0 ) {
    9294                                                 status = 0;
    9295                                         }
    9296                                 }
    9297                         }
    9298 
    9299                         // Set data for the fake xhr object
    9300                         jqXHR.status = status;
    9301                         jqXHR.statusText = ( nativeStatusText || statusText ) + "";
    9302 
    9303                         // Success/Error
    9304                         if ( isSuccess ) {
    9305                                 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
    9306                         } else {
    9307                                 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
    9308                         }
    9309 
    9310                         // Status-dependent callbacks
    9311                         jqXHR.statusCode( statusCode );
    9312                         statusCode = undefined;
    9313 
    9314                         if ( fireGlobals ) {
    9315                                 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
    9316                                         [ jqXHR, s, isSuccess ? success : error ] );
    9317                         }
    9318 
    9319                         // Complete
    9320                         completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
    9321 
    9322                         if ( fireGlobals ) {
    9323                                 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
    9324 
    9325                                 // Handle the global AJAX counter
    9326                                 if ( !( --jQuery.active ) ) {
    9327                                         jQuery.event.trigger( "ajaxStop" );
    9328                                 }
    9329                         }
    9330                 }
    9331 
    9332                 return jqXHR;
    9333         },
    9334 
    9335         getJSON: function( url, data, callback ) {
    9336                 return jQuery.get( url, data, callback, "json" );
    9337         },
    9338 
    9339         getScript: function( url, callback ) {
    9340                 return jQuery.get( url, undefined, callback, "script" );
    9341         }
    9342 } );
    9343 
    9344 jQuery.each( [ "get", "post" ], function( i, method ) {
    9345         jQuery[ method ] = function( url, data, callback, type ) {
    9346 
    9347                 // Shift arguments if data argument was omitted
    9348                 if ( isFunction( data ) ) {
    9349                         type = type || callback;
    9350                         callback = data;
    9351                         data = undefined;
    9352                 }
    9353 
    9354                 // The url can be an options object (which then must have .url)
    9355                 return jQuery.ajax( jQuery.extend( {
    9356                         url: url,
    9357                         type: method,
    9358                         dataType: type,
    9359                         data: data,
    9360                         success: callback
    9361                 }, jQuery.isPlainObject( url ) && url ) );
    9362         };
    9363 } );
    9364 
    9365 
    9366 jQuery._evalUrl = function( url ) {
    9367         return jQuery.ajax( {
    9368                 url: url,
    9369 
    9370                 // Make this explicit, since user can override this through ajaxSetup (#11264)
    9371                 type: "GET",
    9372                 dataType: "script",
    9373                 cache: true,
    9374                 async: false,
    9375                 global: false,
    9376                 "throws": true
    9377         } );
    9378 };
    9379 
    9380 
    9381 jQuery.fn.extend( {
    9382         wrapAll: function( html ) {
    9383                 var wrap;
    9384 
    9385                 if ( this[ 0 ] ) {
    9386                         if ( isFunction( html ) ) {
    9387                                 html = html.call( this[ 0 ] );
    9388                         }
    9389 
    9390                         // The elements to wrap the target around
    9391                         wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
    9392 
    9393                         if ( this[ 0 ].parentNode ) {
    9394                                 wrap.insertBefore( this[ 0 ] );
    9395                         }
    9396 
    9397                         wrap.map( function() {
    9398                                 var elem = this;
    9399 
    9400                                 while ( elem.firstElementChild ) {
    9401                                         elem = elem.firstElementChild;
    9402                                 }
    9403 
    9404                                 return elem;
    9405                         } ).append( this );
    9406                 }
    9407 
    9408                 return this;
    9409         },
    9410 
    9411         wrapInner: function( html ) {
    9412                 if ( isFunction( html ) ) {
    9413                         return this.each( function( i ) {
    9414                                 jQuery( this ).wrapInner( html.call( this, i ) );
    9415                         } );
    9416                 }
    9417 
    9418                 return this.each( function() {
    9419                         var self = jQuery( this ),
    9420                                 contents = self.contents();
    9421 
    9422                         if ( contents.length ) {
    9423                                 contents.wrapAll( html );
    9424 
    9425                         } else {
    9426                                 self.append( html );
    9427                         }
    9428                 } );
    9429         },
    9430 
    9431         wrap: function( html ) {
    9432                 var htmlIsFunction = isFunction( html );
    9433 
    9434                 return this.each( function( i ) {
    9435                         jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
    9436                 } );
    9437         },
    9438 
    9439         unwrap: function( selector ) {
    9440                 this.parent( selector ).not( "body" ).each( function() {
    9441                         jQuery( this ).replaceWith( this.childNodes );
    9442                 } );
    9443                 return this;
    9444         }
    9445 } );
    9446 
    9447 
    9448 jQuery.expr.pseudos.hidden = function( elem ) {
    9449         return !jQuery.expr.pseudos.visible( elem );
    9450 };
    9451 jQuery.expr.pseudos.visible = function( elem ) {
    9452         return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
    9453 };
    9454 
    9455 
    9456 
    9457 
    9458 jQuery.ajaxSettings.xhr = function() {
    9459         try {
    9460                 return new window.XMLHttpRequest();
    9461         } catch ( e ) {}
    9462 };
    9463 
    9464 var xhrSuccessStatus = {
    9465 
    9466                 // File protocol always yields status code 0, assume 200
    9467                 0: 200,
    9468 
    9469                 // Support: IE <=9 only
    9470                 // #1450: sometimes IE returns 1223 when it should be 204
    9471                 1223: 204
    9472         },
    9473         xhrSupported = jQuery.ajaxSettings.xhr();
    9474 
    9475 support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
    9476 support.ajax = xhrSupported = !!xhrSupported;
    9477 
    9478 jQuery.ajaxTransport( function( options ) {
    9479         var callback, errorCallback;
    9480 
    9481         // Cross domain only allowed if supported through XMLHttpRequest
    9482         if ( support.cors || xhrSupported && !options.crossDomain ) {
    9483                 return {
    9484                         send: function( headers, complete ) {
    9485                                 var i,
    9486                                         xhr = options.xhr();
    9487 
    9488                                 xhr.open(
    9489                                         options.type,
    9490                                         options.url,
    9491                                         options.async,
    9492                                         options.username,
    9493                                         options.password
    9494                                 );
    9495 
    9496                                 // Apply custom fields if provided
    9497                                 if ( options.xhrFields ) {
    9498                                         for ( i in options.xhrFields ) {
    9499                                                 xhr[ i ] = options.xhrFields[ i ];
    9500                                         }
    9501                                 }
    9502 
    9503                                 // Override mime type if needed
    9504                                 if ( options.mimeType && xhr.overrideMimeType ) {
    9505                                         xhr.overrideMimeType( options.mimeType );
    9506                                 }
    9507 
    9508                                 // X-Requested-With header
    9509                                 // For cross-domain requests, seeing as conditions for a preflight are
    9510                                 // akin to a jigsaw puzzle, we simply never set it to be sure.
    9511                                 // (it can always be set on a per-request basis or even using ajaxSetup)
    9512                                 // For same-domain requests, won't change header if already provided.
    9513                                 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
    9514                                         headers[ "X-Requested-With" ] = "XMLHttpRequest";
    9515                                 }
    9516 
    9517                                 // Set headers
    9518                                 for ( i in headers ) {
    9519                                         xhr.setRequestHeader( i, headers[ i ] );
    9520                                 }
    9521 
    9522                                 // Callback
    9523                                 callback = function( type ) {
    9524                                         return function() {
    9525                                                 if ( callback ) {
    9526                                                         callback = errorCallback = xhr.onload =
    9527                                                                 xhr.onerror = xhr.onabort = xhr.ontimeout =
    9528                                                                         xhr.onreadystatechange = null;
    9529 
    9530                                                         if ( type === "abort" ) {
    9531                                                                 xhr.abort();
    9532                                                         } else if ( type === "error" ) {
    9533 
    9534                                                                 // Support: IE <=9 only
    9535                                                                 // On a manual native abort, IE9 throws
    9536                                                                 // errors on any property access that is not readyState
    9537                                                                 if ( typeof xhr.status !== "number" ) {
    9538                                                                         complete( 0, "error" );
    9539                                                                 } else {
    9540                                                                         complete(
    9541 
    9542                                                                                 // File: protocol always yields status 0; see #8605, #14207
    9543                                                                                 xhr.status,
    9544                                                                                 xhr.statusText
    9545                                                                         );
    9546                                                                 }
    9547                                                         } else {
    9548                                                                 complete(
    9549                                                                         xhrSuccessStatus[ xhr.status ] || xhr.status,
    9550                                                                         xhr.statusText,
    9551 
    9552                                                                         // Support: IE <=9 only
    9553                                                                         // IE9 has no XHR2 but throws on binary (trac-11426)
    9554                                                                         // For XHR2 non-text, let the caller handle it (gh-2498)
    9555                                                                         ( xhr.responseType || "text" ) !== "text"  ||
    9556                                                                         typeof xhr.responseText !== "string" ?
    9557                                                                                 { binary: xhr.response } :
    9558                                                                                 { text: xhr.responseText },
    9559                                                                         xhr.getAllResponseHeaders()
    9560                                                                 );
    9561                                                         }
    9562                                                 }
    9563                                         };
    9564                                 };
    9565 
    9566                                 // Listen to events
    9567                                 xhr.onload = callback();
    9568                                 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
    9569 
    9570                                 // Support: IE 9 only
    9571                                 // Use onreadystatechange to replace onabort
    9572                                 // to handle uncaught aborts
    9573                                 if ( xhr.onabort !== undefined ) {
    9574                                         xhr.onabort = errorCallback;
    9575                                 } else {
    9576                                         xhr.onreadystatechange = function() {
    9577 
    9578                                                 // Check readyState before timeout as it changes
    9579                                                 if ( xhr.readyState === 4 ) {
    9580 
    9581                                                         // Allow onerror to be called first,
    9582                                                         // but that will not handle a native abort
    9583                                                         // Also, save errorCallback to a variable
    9584                                                         // as xhr.onerror cannot be accessed
    9585                                                         window.setTimeout( function() {
    9586                                                                 if ( callback ) {
    9587                                                                         errorCallback();
    9588                                                                 }
    9589                                                         } );
    9590                                                 }
    9591                                         };
    9592                                 }
    9593 
    9594                                 // Create the abort callback
    9595                                 callback = callback( "abort" );
    9596 
    9597                                 try {
    9598 
    9599                                         // Do send the request (this may raise an exception)
    9600                                         xhr.send( options.hasContent && options.data || null );
    9601                                 } catch ( e ) {
    9602 
    9603                                         // #14683: Only rethrow if this hasn't been notified as an error yet
    9604                                         if ( callback ) {
    9605                                                 throw e;
    9606                                         }
    9607                                 }
    9608                         },
    9609 
    9610                         abort: function() {
    9611                                 if ( callback ) {
    9612                                         callback();
    9613                                 }
    9614                         }
    9615                 };
    9616         }
    9617 } );
    9618 
    9619 
    9620 
    9621 
    9622 // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
    9623 jQuery.ajaxPrefilter( function( s ) {
    9624         if ( s.crossDomain ) {
    9625                 s.contents.script = false;
    9626         }
    9627 } );
    9628 
    9629 // Install script dataType
    9630 jQuery.ajaxSetup( {
    9631         accepts: {
    9632                 script: "text/javascript, application/javascript, " +
    9633                         "application/ecmascript, application/x-ecmascript"
    9634         },
    9635         contents: {
    9636                 script: /\b(?:java|ecma)script\b/
    9637         },
    9638         converters: {
    9639                 "text script": function( text ) {
    9640                         jQuery.globalEval( text );
    9641                         return text;
    9642                 }
    9643         }
    9644 } );
    9645 
    9646 // Handle cache's special case and crossDomain
    9647 jQuery.ajaxPrefilter( "script", function( s ) {
    9648         if ( s.cache === undefined ) {
    9649                 s.cache = false;
    9650         }
    9651         if ( s.crossDomain ) {
    9652                 s.type = "GET";
    9653         }
    9654 } );
    9655 
    9656 // Bind script tag hack transport
    9657 jQuery.ajaxTransport( "script", function( s ) {
    9658 
    9659         // This transport only deals with cross domain requests
    9660         if ( s.crossDomain ) {
    9661                 var script, callback;
    9662                 return {
    9663                         send: function( _, complete ) {
    9664                                 script = jQuery( "<script>" ).prop( {
    9665                                         charset: s.scriptCharset,
    9666                                         src: s.url
    9667                                 } ).on(
    9668                                         "load error",
    9669                                         callback = function( evt ) {
    9670                                                 script.remove();
    9671                                                 callback = null;
    9672                                                 if ( evt ) {
    9673                                                         complete( evt.type === "error" ? 404 : 200, evt.type );
    9674                                                 }
    9675                                         }
    9676                                 );
    9677 
    9678                                 // Use native DOM manipulation to avoid our domManip AJAX trickery
    9679                                 document.head.appendChild( script[ 0 ] );
    9680                         },
    9681                         abort: function() {
    9682                                 if ( callback ) {
    9683                                         callback();
    9684                                 }
    9685                         }
    9686                 };
    9687         }
    9688 } );
    9689 
    9690 
    9691 
    9692 
    9693 var oldCallbacks = [],
    9694         rjsonp = /(=)\?(?=&|$)|\?\?/;
    9695 
    9696 // Default jsonp settings
    9697 jQuery.ajaxSetup( {
    9698         jsonp: "callback",
    9699         jsonpCallback: function() {
    9700                 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
    9701                 this[ callback ] = true;
    9702                 return callback;
    9703         }
    9704 } );
    9705 
    9706 // Detect, normalize options and install callbacks for jsonp requests
    9707 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
    9708 
    9709         var callbackName, overwritten, responseContainer,
    9710                 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
    9711                         "url" :
    9712                         typeof s.data === "string" &&
    9713                                 ( s.contentType || "" )
    9714                                         .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
    9715                                 rjsonp.test( s.data ) && "data"
    9716                 );
    9717 
    9718         // Handle iff the expected data type is "jsonp" or we have a parameter to set
    9719         if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
    9720 
    9721                 // Get callback name, remembering preexisting value associated with it
    9722                 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
    9723                         s.jsonpCallback() :
    9724                         s.jsonpCallback;
    9725 
    9726                 // Insert callback into url or form data
    9727                 if ( jsonProp ) {
    9728                         s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
    9729                 } else if ( s.jsonp !== false ) {
    9730                         s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
    9731                 }
    9732 
    9733                 // Use data converter to retrieve json after script execution
    9734                 s.converters[ "script json" ] = function() {
    9735                         if ( !responseContainer ) {
    9736                                 jQuery.error( callbackName + " was not called" );
    9737                         }
    9738                         return responseContainer[ 0 ];
    9739                 };
    9740 
    9741                 // Force json dataType
    9742                 s.dataTypes[ 0 ] = "json";
    9743 
    9744                 // Install callback
    9745                 overwritten = window[ callbackName ];
    9746                 window[ callbackName ] = function() {
    9747                         responseContainer = arguments;
    9748                 };
    9749 
    9750                 // Clean-up function (fires after converters)
    9751                 jqXHR.always( function() {
    9752 
    9753                         // If previous value didn't exist - remove it
    9754                         if ( overwritten === undefined ) {
    9755                                 jQuery( window ).removeProp( callbackName );
    9756 
    9757                         // Otherwise restore preexisting value
    9758                         } else {
    9759                                 window[ callbackName ] = overwritten;
    9760                         }
    9761 
    9762                         // Save back as free
    9763                         if ( s[ callbackName ] ) {
    9764 
    9765                                 // Make sure that re-using the options doesn't screw things around
    9766                                 s.jsonpCallback = originalSettings.jsonpCallback;
    9767 
    9768                                 // Save the callback name for future use
    9769                                 oldCallbacks.push( callbackName );
    9770                         }
    9771 
    9772                         // Call if it was a function and we have a response
    9773                         if ( responseContainer && isFunction( overwritten ) ) {
    9774                                 overwritten( responseContainer[ 0 ] );
    9775                         }
    9776 
    9777                         responseContainer = overwritten = undefined;
    9778                 } );
    9779 
    9780                 // Delegate to script
    9781                 return "script";
    9782         }
    9783 } );
    9784 
    9785 
    9786 
    9787 
    9788 // Support: Safari 8 only
    9789 // In Safari 8 documents created via document.implementation.createHTMLDocument
    9790 // collapse sibling forms: the second one becomes a child of the first one.
    9791 // Because of that, this security measure has to be disabled in Safari 8.
    9792 // https://bugs.webkit.org/show_bug.cgi?id=137337
    9793 support.createHTMLDocument = ( function() {
    9794         var body = document.implementation.createHTMLDocument( "" ).body;
    9795         body.innerHTML = "<form></form><form></form>";
    9796         return body.childNodes.length === 2;
    9797 } )();
    9798 
    9799 
    9800 // Argument "data" should be string of html
    9801 // context (optional): If specified, the fragment will be created in this context,
    9802 // defaults to document
    9803 // keepScripts (optional): If true, will include scripts passed in the html string
    9804 jQuery.parseHTML = function( data, context, keepScripts ) {
    9805         if ( typeof data !== "string" ) {
    9806                 return [];
    9807         }
    9808         if ( typeof context === "boolean" ) {
    9809                 keepScripts = context;
    9810                 context = false;
    9811         }
    9812 
    9813         var base, parsed, scripts;
    9814 
    9815         if ( !context ) {
    9816 
    9817                 // Stop scripts or inline event handlers from being executed immediately
    9818                 // by using document.implementation
    9819                 if ( support.createHTMLDocument ) {
    9820                         context = document.implementation.createHTMLDocument( "" );
    9821 
    9822                         // Set the base href for the created document
    9823                         // so any parsed elements with URLs
    9824                         // are based on the document's URL (gh-2965)
    9825                         base = context.createElement( "base" );
    9826                         base.href = document.location.href;
    9827                         context.head.appendChild( base );
    9828                 } else {
    9829                         context = document;
    9830                 }
    9831         }
    9832 
    9833         parsed = rsingleTag.exec( data );
    9834         scripts = !keepScripts && [];
    9835 
    9836         // Single tag
    9837         if ( parsed ) {
    9838                 return [ context.createElement( parsed[ 1 ] ) ];
    9839         }
    9840 
    9841         parsed = buildFragment( [ data ], context, scripts );
    9842 
    9843         if ( scripts && scripts.length ) {
    9844                 jQuery( scripts ).remove();
    9845         }
    9846 
    9847         return jQuery.merge( [], parsed.childNodes );
    9848 };
    9849 
    9850 
    9851 /**
    9852  * Load a url into a page
    9853  */
    9854 jQuery.fn.load = function( url, params, callback ) {
    9855         var selector, type, response,
    9856                 self = this,
    9857                 off = url.indexOf( " " );
    9858 
    9859         if ( off > -1 ) {
    9860                 selector = stripAndCollapse( url.slice( off ) );
    9861                 url = url.slice( 0, off );
    9862         }
    9863 
    9864         // If it's a function
    9865         if ( isFunction( params ) ) {
    9866 
    9867                 // We assume that it's the callback
    9868                 callback = params;
    9869                 params = undefined;
    9870 
    9871         // Otherwise, build a param string
    9872         } else if ( params && typeof params === "object" ) {
    9873                 type = "POST";
    9874         }
    9875 
    9876         // If we have elements to modify, make the request
    9877         if ( self.length > 0 ) {
    9878                 jQuery.ajax( {
    9879                         url: url,
    9880 
    9881                         // If "type" variable is undefined, then "GET" method will be used.
    9882                         // Make value of this field explicit since
    9883                         // user can override it through ajaxSetup method
    9884                         type: type || "GET",
    9885                         dataType: "html",
    9886                         data: params
    9887                 } ).done( function( responseText ) {
    9888 
    9889                         // Save response for use in complete callback
    9890                         response = arguments;
    9891 
    9892                         self.html( selector ?
    9893 
    9894                                 // If a selector was specified, locate the right elements in a dummy div
    9895                                 // Exclude scripts to avoid IE 'Permission Denied' errors
    9896                                 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
    9897 
    9898                                 // Otherwise use the full result
    9899                                 responseText );
    9900 
    9901                 // If the request succeeds, this function gets "data", "status", "jqXHR"
    9902                 // but they are ignored because response was set above.
    9903                 // If it fails, this function gets "jqXHR", "status", "error"
    9904                 } ).always( callback && function( jqXHR, status ) {
    9905                         self.each( function() {
    9906                                 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
    9907                         } );
    9908                 } );
    9909         }
    9910 
    9911         return this;
    9912 };
    9913 
    9914 
    9915 
    9916 
    9917 // Attach a bunch of functions for handling common AJAX events
    9918 jQuery.each( [
    9919         "ajaxStart",
    9920         "ajaxStop",
    9921         "ajaxComplete",
    9922         "ajaxError",
    9923         "ajaxSuccess",
    9924         "ajaxSend"
    9925 ], function( i, type ) {
    9926         jQuery.fn[ type ] = function( fn ) {
    9927                 return this.on( type, fn );
    9928         };
    9929 } );
    9930 
    9931 
    9932 
    9933 
    9934 jQuery.expr.pseudos.animated = function( elem ) {
    9935         return jQuery.grep( jQuery.timers, function( fn ) {
    9936                 return elem === fn.elem;
    9937         } ).length;
    9938 };
    9939 
    9940 
    9941 
    9942 
    9943 jQuery.offset = {
    9944         setOffset: function( elem, options, i ) {
    9945                 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
    9946                         position = jQuery.css( elem, "position" ),
    9947                         curElem = jQuery( elem ),
    9948                         props = {};
    9949 
    9950                 // Set position first, in-case top/left are set even on static elem
    9951                 if ( position === "static" ) {
    9952                         elem.style.position = "relative";
    9953                 }
    9954 
    9955                 curOffset = curElem.offset();
    9956                 curCSSTop = jQuery.css( elem, "top" );
    9957                 curCSSLeft = jQuery.css( elem, "left" );
    9958                 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
    9959                         ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
    9960 
    9961                 // Need to be able to calculate position if either
    9962                 // top or left is auto and position is either absolute or fixed
    9963                 if ( calculatePosition ) {
    9964                         curPosition = curElem.position();
    9965                         curTop = curPosition.top;
    9966                         curLeft = curPosition.left;
    9967 
    9968                 } else {
    9969                         curTop = parseFloat( curCSSTop ) || 0;
    9970                         curLeft = parseFloat( curCSSLeft ) || 0;
    9971                 }
    9972 
    9973                 if ( isFunction( options ) ) {
    9974 
    9975                         // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
    9976                         options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
    9977                 }
    9978 
    9979                 if ( options.top != null ) {
    9980                         props.top = ( options.top - curOffset.top ) + curTop;
    9981                 }
    9982                 if ( options.left != null ) {
    9983                         props.left = ( options.left - curOffset.left ) + curLeft;
    9984                 }
    9985 
    9986                 if ( "using" in options ) {
    9987                         options.using.call( elem, props );
    9988 
    9989                 } else {
    9990                         curElem.css( props );
    9991                 }
    9992         }
    9993 };
    9994 
    9995 jQuery.fn.extend( {
    9996 
    9997         // offset() relates an element's border box to the document origin
    9998         offset: function( options ) {
    9999 
    10000                 // Preserve chaining for setter
    10001                 if ( arguments.length ) {
    10002                         return options === undefined ?
    10003                                 this :
    10004                                 this.each( function( i ) {
    10005                                         jQuery.offset.setOffset( this, options, i );
    10006                                 } );
    10007                 }
    10008 
    10009                 var rect, win,
    10010                         elem = this[ 0 ];
    10011 
    10012                 if ( !elem ) {
    10013                         return;
    10014                 }
    10015 
    10016                 // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
    10017                 // Support: IE <=11 only
    10018                 // Running getBoundingClientRect on a
    10019                 // disconnected node in IE throws an error
    10020                 if ( !elem.getClientRects().length ) {
    10021                         return { top: 0, left: 0 };
    10022                 }
    10023 
    10024                 // Get document-relative position by adding viewport scroll to viewport-relative gBCR
    10025                 rect = elem.getBoundingClientRect();
    10026                 win = elem.ownerDocument.defaultView;
    10027                 return {
    10028                         top: rect.top + win.pageYOffset,
    10029                         left: rect.left + win.pageXOffset
    10030                 };
    10031         },
    10032 
    10033         // position() relates an element's margin box to its offset parent's padding box
    10034         // This corresponds to the behavior of CSS absolute positioning
    10035         position: function() {
    10036                 if ( !this[ 0 ] ) {
    10037                         return;
    10038                 }
    10039 
    10040                 var offsetParent, offset, doc,
    10041                         elem = this[ 0 ],
    10042                         parentOffset = { top: 0, left: 0 };
    10043 
    10044                 // position:fixed elements are offset from the viewport, which itself always has zero offset
    10045                 if ( jQuery.css( elem, "position" ) === "fixed" ) {
    10046 
    10047                         // Assume position:fixed implies availability of getBoundingClientRect
    10048                         offset = elem.getBoundingClientRect();
    10049 
    10050                 } else {
    10051                         offset = this.offset();
    10052 
    10053                         // Account for the *real* offset parent, which can be the document or its root element
    10054                         // when a statically positioned element is identified
    10055                         doc = elem.ownerDocument;
    10056                         offsetParent = elem.offsetParent || doc.documentElement;
    10057                         while ( offsetParent &&
    10058                                 ( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
    10059                                 jQuery.css( offsetParent, "position" ) === "static" ) {
    10060 
    10061                                 offsetParent = offsetParent.parentNode;
    10062                         }
    10063                         if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
    10064 
    10065                                 // Incorporate borders into its offset, since they are outside its content origin
    10066                                 parentOffset = jQuery( offsetParent ).offset();
    10067                                 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
    10068                                 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
    10069                         }
    10070                 }
    10071 
    10072                 // Subtract parent offsets and element margins
    10073                 return {
    10074                         top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
    10075                         left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
    10076                 };
    10077         },
    10078 
    10079         // This method will return documentElement in the following cases:
    10080         // 1) For the element inside the iframe without offsetParent, this method will return
    10081         //    documentElement of the parent window
    10082         // 2) For the hidden or detached element
    10083         // 3) For body or html element, i.e. in case of the html node - it will return itself
    10084         //
    10085         // but those exceptions were never presented as a real life use-cases
    10086         // and might be considered as more preferable results.
    10087         //
    10088         // This logic, however, is not guaranteed and can change at any point in the future
    10089         offsetParent: function() {
    10090                 return this.map( function() {
    10091                         var offsetParent = this.offsetParent;
    10092 
    10093                         while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
    10094                                 offsetParent = offsetParent.offsetParent;
    10095                         }
    10096 
    10097                         return offsetParent || documentElement;
    10098                 } );
    10099         }
    10100 } );
    10101 
    10102 // Create scrollLeft and scrollTop methods
    10103 jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
    10104         var top = "pageYOffset" === prop;
    10105 
    10106         jQuery.fn[ method ] = function( val ) {
    10107                 return access( this, function( elem, method, val ) {
    10108 
    10109                         // Coalesce documents and windows
    10110                         var win;
    10111                         if ( isWindow( elem ) ) {
    10112                                 win = elem;
    10113                         } else if ( elem.nodeType === 9 ) {
    10114                                 win = elem.defaultView;
    10115                         }
    10116 
    10117                         if ( val === undefined ) {
    10118                                 return win ? win[ prop ] : elem[ method ];
    10119                         }
    10120 
    10121                         if ( win ) {
    10122                                 win.scrollTo(
    10123                                         !top ? val : win.pageXOffset,
    10124                                         top ? val : win.pageYOffset
    10125                                 );
    10126 
    10127                         } else {
    10128                                 elem[ method ] = val;
    10129                         }
    10130                 }, method, val, arguments.length );
    10131         };
    10132 } );
    10133 
    10134 // Support: Safari <=7 - 9.1, Chrome <=37 - 49
    10135 // Add the top/left cssHooks using jQuery.fn.position
    10136 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
    10137 // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
    10138 // getComputedStyle returns percent when specified for top/left/bottom/right;
    10139 // rather than make the css module depend on the offset module, just check for it here
    10140 jQuery.each( [ "top", "left" ], function( i, prop ) {
    10141         jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
    10142                 function( elem, computed ) {
    10143                         if ( computed ) {
    10144                                 computed = curCSS( elem, prop );
    10145 
    10146                                 // If curCSS returns percentage, fallback to offset
    10147                                 return rnumnonpx.test( computed ) ?
    10148                                         jQuery( elem ).position()[ prop ] + "px" :
    10149                                         computed;
    10150                         }
    10151                 }
    10152         );
    10153 } );
    10154 
    10155 
    10156 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
    10157 jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
    10158         jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
    10159                 function( defaultExtra, funcName ) {
    10160 
    10161                 // Margin is only for outerHeight, outerWidth
    10162                 jQuery.fn[ funcName ] = function( margin, value ) {
    10163                         var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
    10164                                 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
    10165 
    10166                         return access( this, function( elem, type, value ) {
    10167                                 var doc;
    10168 
    10169                                 if ( isWindow( elem ) ) {
    10170 
    10171                                         // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
    10172                                         return funcName.indexOf( "outer" ) === 0 ?
    10173                                                 elem[ "inner" + name ] :
    10174                                                 elem.document.documentElement[ "client" + name ];
    10175                                 }
    10176 
    10177                                 // Get document width or height
    10178                                 if ( elem.nodeType === 9 ) {
    10179                                         doc = elem.documentElement;
    10180 
    10181                                         // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
    10182                                         // whichever is greatest
    10183                                         return Math.max(
    10184                                                 elem.body[ "scroll" + name ], doc[ "scroll" + name ],
    10185                                                 elem.body[ "offset" + name ], doc[ "offset" + name ],
    10186                                                 doc[ "client" + name ]
    10187                                         );
    10188                                 }
    10189 
    10190                                 return value === undefined ?
    10191 
    10192                                         // Get width or height on the element, requesting but not forcing parseFloat
    10193                                         jQuery.css( elem, type, extra ) :
    10194 
    10195                                         // Set width or height on the element
    10196                                         jQuery.style( elem, type, value, extra );
    10197                         }, type, chainable ? margin : undefined, chainable );
    10198                 };
    10199         } );
    10200 } );
    10201 
    10202 
    10203 jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
    10204         "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
    10205         "change select submit keydown keypress keyup contextmenu" ).split( " " ),
    10206         function( i, name ) {
    10207 
    10208         // Handle event binding
    10209         jQuery.fn[ name ] = function( data, fn ) {
    10210                 return arguments.length > 0 ?
    10211                         this.on( name, null, data, fn ) :
    10212                         this.trigger( name );
    10213         };
    10214 } );
    10215 
    10216 jQuery.fn.extend( {
    10217         hover: function( fnOver, fnOut ) {
    10218                 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
    10219         }
    10220 } );
    10221 
    10222 
    10223 
    10224 
    10225 jQuery.fn.extend( {
    10226 
    10227         bind: function( types, data, fn ) {
    10228                 return this.on( types, null, data, fn );
    10229         },
    10230         unbind: function( types, fn ) {
    10231                 return this.off( types, null, fn );
    10232         },
    10233 
    10234         delegate: function( selector, types, data, fn ) {
    10235                 return this.on( types, selector, data, fn );
    10236         },
    10237         undelegate: function( selector, types, fn ) {
    10238 
    10239                 // ( namespace ) or ( selector, types [, fn] )
    10240                 return arguments.length === 1 ?
    10241                         this.off( selector, "**" ) :
    10242                         this.off( types, selector || "**", fn );
    10243         }
    10244 } );
    10245 
    10246 // Bind a function to a context, optionally partially applying any
    10247 // arguments.
    10248 // jQuery.proxy is deprecated to promote standards (specifically Function#bind)
    10249 // However, it is not slated for removal any time soon
    10250 jQuery.proxy = function( fn, context ) {
    10251         var tmp, args, proxy;
    10252 
    10253         if ( typeof context === "string" ) {
    10254                 tmp = fn[ context ];
    10255                 context = fn;
    10256                 fn = tmp;
    10257         }
    10258 
    10259         // Quick check to determine if target is callable, in the spec
    10260         // this throws a TypeError, but we will just return undefined.
    10261         if ( !isFunction( fn ) ) {
    10262                 return undefined;
    10263         }
    10264 
    10265         // Simulated bind
    10266         args = slice.call( arguments, 2 );
    10267         proxy = function() {
    10268                 return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
    10269         };
    10270 
    10271         // Set the guid of unique handler to the same of original handler, so it can be removed
    10272         proxy.guid = fn.guid = fn.guid || jQuery.guid++;
    10273 
    10274         return proxy;
    10275 };
    10276 
    10277 jQuery.holdReady = function( hold ) {
    10278         if ( hold ) {
    10279                 jQuery.readyWait++;
    10280         } else {
    10281                 jQuery.ready( true );
    10282         }
    10283 };
    10284 jQuery.isArray = Array.isArray;
    10285 jQuery.parseJSON = JSON.parse;
    10286 jQuery.nodeName = nodeName;
    10287 jQuery.isFunction = isFunction;
    10288 jQuery.isWindow = isWindow;
    10289 jQuery.camelCase = camelCase;
    10290 jQuery.type = toType;
    10291 
    10292 jQuery.now = Date.now;
    10293 
    10294 jQuery.isNumeric = function( obj ) {
    10295 
    10296         // As of jQuery 3.0, isNumeric is limited to
    10297         // strings and numbers (primitives or objects)
    10298         // that can be coerced to finite numbers (gh-2662)
    10299         var type = jQuery.type( obj );
    10300         return ( type === "number" || type === "string" ) &&
    10301 
    10302                 // parseFloat NaNs numeric-cast false positives ("")
    10303                 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
    10304                 // subtraction forces infinities to NaN
    10305                 !isNaN( obj - parseFloat( obj ) );
    10306 };
    10307 
    10308 
    10309 
    10310 
    10311 // Register as a named AMD module, since jQuery can be concatenated with other
    10312 // files that may use define, but not via a proper concatenation script that
    10313 // understands anonymous AMD modules. A named AMD is safest and most robust
    10314 // way to register. Lowercase jquery is used because AMD module names are
    10315 // derived from file names, and jQuery is normally delivered in a lowercase
    10316 // file name. Do this after creating the global so that if an AMD module wants
    10317 // to call noConflict to hide this version of jQuery, it will work.
    10318 
    10319 // Note that for maximum portability, libraries that are not jQuery should
    10320 // declare themselves as anonymous modules, and avoid setting a global if an
    10321 // AMD loader is present. jQuery is a special case. For more information, see
    10322 // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
    10323 
    10324 if ( typeof define === "function" && define.amd ) {
    10325         define( "jquery", [], function() {
    10326                 return jQuery;
    10327         } );
    10328 }
    10329 
    10330 
    10331 
    10332 
    10333 var
    10334 
    10335         // Map over jQuery in case of overwrite
    10336         _jQuery = window.jQuery,
    10337 
    10338         // Map over the $ in case of overwrite
    10339         _$ = window.$;
    10340 
    10341 jQuery.noConflict = function( deep ) {
    10342         if ( window.$ === jQuery ) {
    10343                 window.$ = _$;
    10344         }
    10345 
    10346         if ( deep && window.jQuery === jQuery ) {
    10347                 window.jQuery = _jQuery;
    10348         }
    10349 
    10350         return jQuery;
    10351 };
    10352 
    10353 // Expose jQuery and $ identifiers, even in AMD
    10354 // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
    10355 // and CommonJS for browser emulators (#13566)
    10356 if ( !noGlobal ) {
    10357         window.jQuery = window.$ = jQuery;
    10358 }
    10359 
    10360 
    10361 
    10362 
    10363 return jQuery;
    10364 } );
     1/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
     2!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
  • doc/build/html/_static/language_data.js

    rf3421e6 r5547430  
    66 * namely the list of stopwords, stemmer, scorer and splitter.
    77 *
    8  * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
     8 * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    99 * :license: BSD, see LICENSE for details.
    1010 *
     
    1414
    1515
    16 /* Non-minified version JS is _stemmer.js if file is provided */
     16/* Non-minified version is copied as a separate JS file, is available */
     17
    1718/**
    1819 * Porter Stemmer
     
    196197  }
    197198}
    198 
    199199
    200200
  • doc/build/html/_static/pygments.css

    rf3421e6 r5547430  
     1pre { line-height: 125%; }
     2td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
     3span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
     4td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
     5span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
    16.highlight .hll { background-color: #ffffcc }
    2 .highlight  { background: #f8f8f8; }
    3 .highlight .c { color: #8f5902; font-style: italic } /* Comment */
    4 .highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
    5 .highlight .g { color: #000000 } /* Generic */
    6 .highlight .k { color: #004461; font-weight: bold } /* Keyword */
    7 .highlight .l { color: #000000 } /* Literal */
    8 .highlight .n { color: #000000 } /* Name */
    9 .highlight .o { color: #582800 } /* Operator */
    10 .highlight .x { color: #000000 } /* Other */
    11 .highlight .p { color: #000000; font-weight: bold } /* Punctuation */
    12 .highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
    13 .highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
    14 .highlight .cp { color: #8f5902 } /* Comment.Preproc */
    15 .highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
    16 .highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
    17 .highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
    18 .highlight .gd { color: #a40000 } /* Generic.Deleted */
    19 .highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
    20 .highlight .gr { color: #ef2929 } /* Generic.Error */
    21 .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
    22 .highlight .gi { color: #00A000 } /* Generic.Inserted */
    23 .highlight .go { color: #888888 } /* Generic.Output */
    24 .highlight .gp { color: #745334 } /* Generic.Prompt */
    25 .highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
    26 .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
    27 .highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
    28 .highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */
    29 .highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */
    30 .highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */
    31 .highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */
    32 .highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */
    33 .highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */
    34 .highlight .ld { color: #000000 } /* Literal.Date */
    35 .highlight .m { color: #990000 } /* Literal.Number */
    36 .highlight .s { color: #4e9a06 } /* Literal.String */
    37 .highlight .na { color: #c4a000 } /* Name.Attribute */
    38 .highlight .nb { color: #004461 } /* Name.Builtin */
    39 .highlight .nc { color: #000000 } /* Name.Class */
    40 .highlight .no { color: #000000 } /* Name.Constant */
    41 .highlight .nd { color: #888888 } /* Name.Decorator */
    42 .highlight .ni { color: #ce5c00 } /* Name.Entity */
    43 .highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
    44 .highlight .nf { color: #000000 } /* Name.Function */
    45 .highlight .nl { color: #f57900 } /* Name.Label */
    46 .highlight .nn { color: #000000 } /* Name.Namespace */
    47 .highlight .nx { color: #000000 } /* Name.Other */
    48 .highlight .py { color: #000000 } /* Name.Property */
    49 .highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
    50 .highlight .nv { color: #000000 } /* Name.Variable */
    51 .highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
    52 .highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
    53 .highlight .mb { color: #990000 } /* Literal.Number.Bin */
    54 .highlight .mf { color: #990000 } /* Literal.Number.Float */
    55 .highlight .mh { color: #990000 } /* Literal.Number.Hex */
    56 .highlight .mi { color: #990000 } /* Literal.Number.Integer */
    57 .highlight .mo { color: #990000 } /* Literal.Number.Oct */
    58 .highlight .sa { color: #4e9a06 } /* Literal.String.Affix */
    59 .highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
    60 .highlight .sc { color: #4e9a06 } /* Literal.String.Char */
    61 .highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */
    62 .highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
    63 .highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
    64 .highlight .se { color: #4e9a06 } /* Literal.String.Escape */
    65 .highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
    66 .highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
    67 .highlight .sx { color: #4e9a06 } /* Literal.String.Other */
    68 .highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
    69 .highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
    70 .highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
    71 .highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
    72 .highlight .fm { color: #000000 } /* Name.Function.Magic */
    73 .highlight .vc { color: #000000 } /* Name.Variable.Class */
    74 .highlight .vg { color: #000000 } /* Name.Variable.Global */
    75 .highlight .vi { color: #000000 } /* Name.Variable.Instance */
    76 .highlight .vm { color: #000000 } /* Name.Variable.Magic */
    77 .highlight .il { color: #990000 } /* Literal.Number.Integer.Long */
     7.highlight { background: #ffffff; }
  • doc/build/html/_static/searchtools.js

    rf3421e6 r5547430  
    55 * Sphinx JavaScript utilities for the full-text search.
    66 *
    7  * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
     7 * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    88 * :license: BSD, see LICENSE for details.
    99 *
     
    3737    // query found in title
    3838    title: 15,
     39    partialTitle: 7,
    3940    // query found in terms
    40     term: 5
     41    term: 5,
     42    partialTerm: 2
    4143  };
    4244}
     
    5658  _queued_query : null,
    5759  _pulse_status : -1,
     60
     61  htmlToText : function(htmlString) {
     62      var virtualDocument = document.implementation.createHTMLDocument('virtual');
     63      var htmlElement = $(htmlString, virtualDocument);
     64      htmlElement.find('.headerlink').remove();
     65      docContent = htmlElement.find('[role=main]')[0];
     66      if(docContent === undefined) {
     67          console.warn("Content block not found. Sphinx search tries to obtain it " +
     68                       "via '[role=main]'. Could you check your theme or template.");
     69          return "";
     70      }
     71      return docContent.textContent || docContent.innerText;
     72  },
    5873
    5974  init : function() {
     
    121136    this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
    122137    this.dots = $('<span></span>').appendTo(this.title);
    123     this.status = $('<p style="display: none"></p>').appendTo(this.out);
     138    this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
    124139    this.output = $('<ul class="search"/>').appendTo(this.out);
    125140
     
    152167      }
    153168
    154       if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
    155           tmp[i] === "") {
     169      if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
    156170        // skip this "word"
    157171        continue;
     
    235249      if (results.length) {
    236250        var item = results.pop();
    237         var listItem = $('<li style="display:none"></li>');
    238         if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
     251        var listItem = $('<li></li>');
     252        var requestUrl = "";
     253        var linkUrl = "";
     254        if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
    239255          // dirhtml builder
    240256          var dirname = item[0] + '/';
     
    244260            dirname = '';
    245261          }
    246           listItem.append($('<a/>').attr('href',
    247             DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
    248             highlightstring + item[2]).html(item[1]));
     262          requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
     263          linkUrl = requestUrl;
     264
    249265        } else {
    250266          // normal html builders
    251           listItem.append($('<a/>').attr('href',
    252             item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
     267          requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
     268          linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
     269        }
     270        listItem.append($('<a/>').attr('href',
     271            linkUrl +
    253272            highlightstring + item[2]).html(item[1]));
    254         }
    255273        if (item[3]) {
    256274          listItem.append($('<span> (' + item[3] + ')</span>'));
    257275          Search.output.append(listItem);
    258           listItem.slideDown(5, function() {
     276          setTimeout(function() {
    259277            displayNextItem();
    260           });
     278          }, 5);
    261279        } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
    262           var suffix = DOCUMENTATION_OPTIONS.SOURCELINK_SUFFIX;
    263           if (suffix === undefined) {
    264             suffix = '.txt';
    265           }
    266           $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[5] + (item[5].slice(-suffix.length) === suffix ? '' : suffix),
     280          $.ajax({url: requestUrl,
    267281                  dataType: "text",
    268282                  complete: function(jqxhr, textstatus) {
    269283                    var data = jqxhr.responseText;
    270284                    if (data !== '' && data !== undefined) {
    271                       listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
     285                      var summary = Search.makeSearchSummary(data, searchterms, hlterms);
     286                      if (summary) {
     287                        listItem.append(summary);
     288                      }
    272289                    }
    273290                    Search.output.append(listItem);
    274                     listItem.slideDown(5, function() {
     291                    setTimeout(function() {
    275292                      displayNextItem();
    276                     });
     293                    }, 5);
    277294                  }});
    278295        } else {
    279296          // no source available, just display title
    280297          Search.output.append(listItem);
    281           listItem.slideDown(5, function() {
     298          setTimeout(function() {
    282299            displayNextItem();
    283           });
     300          }, 5);
    284301        }
    285302      }
     
    312329
    313330    for (var prefix in objects) {
    314       for (var name in objects[prefix]) {
     331      for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) {
     332        var match = objects[prefix][iMatch];
     333        var name = match[4];
    315334        var fullname = (prefix ? prefix + '.' : '') + name;
    316         if (fullname.toLowerCase().indexOf(object) > -1) {
     335        var fullnameLower = fullname.toLowerCase()
     336        if (fullnameLower.indexOf(object) > -1) {
    317337          var score = 0;
    318           var parts = fullname.split('.');
     338          var parts = fullnameLower.split('.');
    319339          // check for different match types: exact matches of full name or
    320340          // "last name" (i.e. last dotted part)
    321           if (fullname == object || parts[parts.length - 1] == object) {
     341          if (fullnameLower == object || parts[parts.length - 1] == object) {
    322342            score += Scorer.objNameMatch;
    323343          // matches in last name
     
    325345            score += Scorer.objPartialMatch;
    326346          }
    327           var match = objects[prefix][name];
    328347          var objname = objnames[match[1]][2];
    329348          var title = titles[match[0]];
     
    366385
    367386  /**
     387   * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
     388   */
     389  escapeRegExp : function(string) {
     390    return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
     391  },
     392
     393  /**
    368394   * search for full-text terms in the index
    369395   */
     
    386412        {files: titleterms[word], score: Scorer.title}
    387413      ];
     414      // add support for partial matches
     415      if (word.length > 2) {
     416        var word_regex = this.escapeRegExp(word);
     417        for (var w in terms) {
     418          if (w.match(word_regex) && !terms[word]) {
     419            _o.push({files: terms[w], score: Scorer.partialTerm})
     420          }
     421        }
     422        for (var w in titleterms) {
     423          if (w.match(word_regex) && !titleterms[word]) {
     424              _o.push({files: titleterms[w], score: Scorer.partialTitle})
     425          }
     426        }
     427      }
    388428
    389429      // no match but word was a required one
     
    405445          file = _files[j];
    406446          if (!(file in scoreMap))
    407             scoreMap[file] = {}
     447            scoreMap[file] = {};
    408448          scoreMap[file][word] = o.score;
    409449        }
     
    413453      for (j = 0; j < files.length; j++) {
    414454        file = files[j];
    415         if (file in fileMap)
     455        if (file in fileMap && fileMap[file].indexOf(word) === -1)
    416456          fileMap[file].push(word);
    417457        else
     
    425465
    426466      // check if all requirements are matched
    427       if (fileMap[file].length != searchterms.length)
    428           continue;
     467      var filteredTermCount = // as search terms with length < 3 are discarded: ignore
     468        searchterms.filter(function(term){return term.length > 2}).length
     469      if (
     470        fileMap[file].length != searchterms.length &&
     471        fileMap[file].length != filteredTermCount
     472      ) continue;
    429473
    430474      // ensure that none of the excluded terms is in the search result
     
    457501   * latter for highlighting it.
    458502   */
    459   makeSearchSummary : function(text, keywords, hlwords) {
     503  makeSearchSummary : function(htmlText, keywords, hlwords) {
     504    var text = Search.htmlToText(htmlText);
     505    if (text == "") {
     506      return null;
     507    }
    460508    var textLower = text.toLowerCase();
    461509    var start = 0;
     
    469517      $.trim(text.substr(start, 240)) +
    470518      ((start + 240 - text.length) ? '...' : '');
    471     var rv = $('<div class="context"></div>').text(excerpt);
     519    var rv = $('<p class="context"></p>').text(excerpt);
    472520    $.each(hlwords, function() {
    473521      rv = rv.highlightText(this, 'highlighted');
  • doc/build/html/_static/underscore.js

    rf3421e6 r5547430  
    1 //     Underscore.js 1.9.1
    2 //     http://underscorejs.org
    3 //     (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
     1!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n="undefined"!=typeof globalThis?globalThis:n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){
     2//     Underscore.js 1.13.1
     3//     https://underscorejs.org
     4//     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
    45//     Underscore may be freely distributed under the MIT license.
    5 
    6 (function() {
    7 
    8   // Baseline setup
    9   // --------------
    10 
    11   // Establish the root object, `window` (`self`) in the browser, `global`
    12   // on the server, or `this` in some virtual machines. We use `self`
    13   // instead of `window` for `WebWorker` support.
    14   var root = typeof self == 'object' && self.self === self && self ||
    15             typeof global == 'object' && global.global === global && global ||
    16             this ||
    17             {};
    18 
    19   // Save the previous value of the `_` variable.
    20   var previousUnderscore = root._;
    21 
    22   // Save bytes in the minified (but not gzipped) version:
    23   var ArrayProto = Array.prototype, ObjProto = Object.prototype;
    24   var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
    25 
    26   // Create quick reference variables for speed access to core prototypes.
    27   var push = ArrayProto.push,
    28       slice = ArrayProto.slice,
    29       toString = ObjProto.toString,
    30       hasOwnProperty = ObjProto.hasOwnProperty;
    31 
    32   // All **ECMAScript 5** native function implementations that we hope to use
    33   // are declared here.
    34   var nativeIsArray = Array.isArray,
    35       nativeKeys = Object.keys,
    36       nativeCreate = Object.create;
    37 
    38   // Naked function reference for surrogate-prototype-swapping.
    39   var Ctor = function(){};
    40 
    41   // Create a safe reference to the Underscore object for use below.
    42   var _ = function(obj) {
    43     if (obj instanceof _) return obj;
    44     if (!(this instanceof _)) return new _(obj);
    45     this._wrapped = obj;
    46   };
    47 
    48   // Export the Underscore object for **Node.js**, with
    49   // backwards-compatibility for their old module API. If we're in
    50   // the browser, add `_` as a global object.
    51   // (`nodeType` is checked to ensure that `module`
    52   // and `exports` are not HTML elements.)
    53   if (typeof exports != 'undefined' && !exports.nodeType) {
    54     if (typeof module != 'undefined' && !module.nodeType && module.exports) {
    55       exports = module.exports = _;
    56     }
    57     exports._ = _;
    58   } else {
    59     root._ = _;
    60   }
    61 
    62   // Current version.
    63   _.VERSION = '1.9.1';
    64 
    65   // Internal function that returns an efficient (for current engines) version
    66   // of the passed-in callback, to be repeatedly applied in other Underscore
    67   // functions.
    68   var optimizeCb = function(func, context, argCount) {
    69     if (context === void 0) return func;
    70     switch (argCount == null ? 3 : argCount) {
    71       case 1: return function(value) {
    72         return func.call(context, value);
    73       };
    74       // The 2-argument case is omitted because we’re not using it.
    75       case 3: return function(value, index, collection) {
    76         return func.call(context, value, index, collection);
    77       };
    78       case 4: return function(accumulator, value, index, collection) {
    79         return func.call(context, accumulator, value, index, collection);
    80       };
    81     }
    82     return function() {
    83       return func.apply(context, arguments);
    84     };
    85   };
    86 
    87   var builtinIteratee;
    88 
    89   // An internal function to generate callbacks that can be applied to each
    90   // element in a collection, returning the desired result — either `identity`,
    91   // an arbitrary callback, a property matcher, or a property accessor.
    92   var cb = function(value, context, argCount) {
    93     if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);
    94     if (value == null) return _.identity;
    95     if (_.isFunction(value)) return optimizeCb(value, context, argCount);
    96     if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);
    97     return _.property(value);
    98   };
    99 
    100   // External wrapper for our callback generator. Users may customize
    101   // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
    102   // This abstraction hides the internal-only argCount argument.
    103   _.iteratee = builtinIteratee = function(value, context) {
    104     return cb(value, context, Infinity);
    105   };
    106 
    107   // Some functions take a variable number of arguments, or a few expected
    108   // arguments at the beginning and then a variable number of values to operate
    109   // on. This helper accumulates all remaining arguments past the function’s
    110   // argument length (or an explicit `startIndex`), into an array that becomes
    111   // the last argument. Similar to ES6’s "rest parameter".
    112   var restArguments = function(func, startIndex) {
    113     startIndex = startIndex == null ? func.length - 1 : +startIndex;
    114     return function() {
    115       var length = Math.max(arguments.length - startIndex, 0),
    116           rest = Array(length),
    117           index = 0;
    118       for (; index < length; index++) {
    119         rest[index] = arguments[index + startIndex];
    120       }
    121       switch (startIndex) {
    122         case 0: return func.call(this, rest);
    123         case 1: return func.call(this, arguments[0], rest);
    124         case 2: return func.call(this, arguments[0], arguments[1], rest);
    125       }
    126       var args = Array(startIndex + 1);
    127       for (index = 0; index < startIndex; index++) {
    128         args[index] = arguments[index];
    129       }
    130       args[startIndex] = rest;
    131       return func.apply(this, args);
    132     };
    133   };
    134 
    135   // An internal function for creating a new object that inherits from another.
    136   var baseCreate = function(prototype) {
    137     if (!_.isObject(prototype)) return {};
    138     if (nativeCreate) return nativeCreate(prototype);
    139     Ctor.prototype = prototype;
    140     var result = new Ctor;
    141     Ctor.prototype = null;
    142     return result;
    143   };
    144 
    145   var shallowProperty = function(key) {
    146     return function(obj) {
    147       return obj == null ? void 0 : obj[key];
    148     };
    149   };
    150 
    151   var has = function(obj, path) {
    152     return obj != null && hasOwnProperty.call(obj, path);
    153   }
    154 
    155   var deepGet = function(obj, path) {
    156     var length = path.length;
    157     for (var i = 0; i < length; i++) {
    158       if (obj == null) return void 0;
    159       obj = obj[path[i]];
    160     }
    161     return length ? obj : void 0;
    162   };
    163 
    164   // Helper for collection methods to determine whether a collection
    165   // should be iterated as an array or as an object.
    166   // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
    167   // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
    168   var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
    169   var getLength = shallowProperty('length');
    170   var isArrayLike = function(collection) {
    171     var length = getLength(collection);
    172     return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
    173   };
    174 
    175   // Collection Functions
    176   // --------------------
    177 
    178   // The cornerstone, an `each` implementation, aka `forEach`.
    179   // Handles raw objects in addition to array-likes. Treats all
    180   // sparse array-likes as if they were dense.
    181   _.each = _.forEach = function(obj, iteratee, context) {
    182     iteratee = optimizeCb(iteratee, context);
    183     var i, length;
    184     if (isArrayLike(obj)) {
    185       for (i = 0, length = obj.length; i < length; i++) {
    186         iteratee(obj[i], i, obj);
    187       }
    188     } else {
    189       var keys = _.keys(obj);
    190       for (i = 0, length = keys.length; i < length; i++) {
    191         iteratee(obj[keys[i]], keys[i], obj);
    192       }
    193     }
    194     return obj;
    195   };
    196 
    197   // Return the results of applying the iteratee to each element.
    198   _.map = _.collect = function(obj, iteratee, context) {
    199     iteratee = cb(iteratee, context);
    200     var keys = !isArrayLike(obj) && _.keys(obj),
    201         length = (keys || obj).length,
    202         results = Array(length);
    203     for (var index = 0; index < length; index++) {
    204       var currentKey = keys ? keys[index] : index;
    205       results[index] = iteratee(obj[currentKey], currentKey, obj);
    206     }
    207     return results;
    208   };
    209 
    210   // Create a reducing function iterating left or right.
    211   var createReduce = function(dir) {
    212     // Wrap code that reassigns argument variables in a separate function than
    213     // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
    214     var reducer = function(obj, iteratee, memo, initial) {
    215       var keys = !isArrayLike(obj) && _.keys(obj),
    216           length = (keys || obj).length,
    217           index = dir > 0 ? 0 : length - 1;
    218       if (!initial) {
    219         memo = obj[keys ? keys[index] : index];
    220         index += dir;
    221       }
    222       for (; index >= 0 && index < length; index += dir) {
    223         var currentKey = keys ? keys[index] : index;
    224         memo = iteratee(memo, obj[currentKey], currentKey, obj);
    225       }
    226       return memo;
    227     };
    228 
    229     return function(obj, iteratee, memo, context) {
    230       var initial = arguments.length >= 3;
    231       return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
    232     };
    233   };
    234 
    235   // **Reduce** builds up a single result from a list of values, aka `inject`,
    236   // or `foldl`.
    237   _.reduce = _.foldl = _.inject = createReduce(1);
    238 
    239   // The right-associative version of reduce, also known as `foldr`.
    240   _.reduceRight = _.foldr = createReduce(-1);
    241 
    242   // Return the first value which passes a truth test. Aliased as `detect`.
    243   _.find = _.detect = function(obj, predicate, context) {
    244     var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;
    245     var key = keyFinder(obj, predicate, context);
    246     if (key !== void 0 && key !== -1) return obj[key];
    247   };
    248 
    249   // Return all the elements that pass a truth test.
    250   // Aliased as `select`.
    251   _.filter = _.select = function(obj, predicate, context) {
    252     var results = [];
    253     predicate = cb(predicate, context);
    254     _.each(obj, function(value, index, list) {
    255       if (predicate(value, index, list)) results.push(value);
    256     });
    257     return results;
    258   };
    259 
    260   // Return all the elements for which a truth test fails.
    261   _.reject = function(obj, predicate, context) {
    262     return _.filter(obj, _.negate(cb(predicate)), context);
    263   };
    264 
    265   // Determine whether all of the elements match a truth test.
    266   // Aliased as `all`.
    267   _.every = _.all = function(obj, predicate, context) {
    268     predicate = cb(predicate, context);
    269     var keys = !isArrayLike(obj) && _.keys(obj),
    270         length = (keys || obj).length;
    271     for (var index = 0; index < length; index++) {
    272       var currentKey = keys ? keys[index] : index;
    273       if (!predicate(obj[currentKey], currentKey, obj)) return false;
    274     }
    275     return true;
    276   };
    277 
    278   // Determine if at least one element in the object matches a truth test.
    279   // Aliased as `any`.
    280   _.some = _.any = function(obj, predicate, context) {
    281     predicate = cb(predicate, context);
    282     var keys = !isArrayLike(obj) && _.keys(obj),
    283         length = (keys || obj).length;
    284     for (var index = 0; index < length; index++) {
    285       var currentKey = keys ? keys[index] : index;
    286       if (predicate(obj[currentKey], currentKey, obj)) return true;
    287     }
    288     return false;
    289   };
    290 
    291   // Determine if the array or object contains a given item (using `===`).
    292   // Aliased as `includes` and `include`.
    293   _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
    294     if (!isArrayLike(obj)) obj = _.values(obj);
    295     if (typeof fromIndex != 'number' || guard) fromIndex = 0;
    296     return _.indexOf(obj, item, fromIndex) >= 0;
    297   };
    298 
    299   // Invoke a method (with arguments) on every item in a collection.
    300   _.invoke = restArguments(function(obj, path, args) {
    301     var contextPath, func;
    302     if (_.isFunction(path)) {
    303       func = path;
    304     } else if (_.isArray(path)) {
    305       contextPath = path.slice(0, -1);
    306       path = path[path.length - 1];
    307     }
    308     return _.map(obj, function(context) {
    309       var method = func;
    310       if (!method) {
    311         if (contextPath && contextPath.length) {
    312           context = deepGet(context, contextPath);
    313         }
    314         if (context == null) return void 0;
    315         method = context[path];
    316       }
    317       return method == null ? method : method.apply(context, args);
    318     });
    319   });
    320 
    321   // Convenience version of a common use case of `map`: fetching a property.
    322   _.pluck = function(obj, key) {
    323     return _.map(obj, _.property(key));
    324   };
    325 
    326   // Convenience version of a common use case of `filter`: selecting only objects
    327   // containing specific `key:value` pairs.
    328   _.where = function(obj, attrs) {
    329     return _.filter(obj, _.matcher(attrs));
    330   };
    331 
    332   // Convenience version of a common use case of `find`: getting the first object
    333   // containing specific `key:value` pairs.
    334   _.findWhere = function(obj, attrs) {
    335     return _.find(obj, _.matcher(attrs));
    336   };
    337 
    338   // Return the maximum element (or element-based computation).
    339   _.max = function(obj, iteratee, context) {
    340     var result = -Infinity, lastComputed = -Infinity,
    341         value, computed;
    342     if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
    343       obj = isArrayLike(obj) ? obj : _.values(obj);
    344       for (var i = 0, length = obj.length; i < length; i++) {
    345         value = obj[i];
    346         if (value != null && value > result) {
    347           result = value;
    348         }
    349       }
    350     } else {
    351       iteratee = cb(iteratee, context);
    352       _.each(obj, function(v, index, list) {
    353         computed = iteratee(v, index, list);
    354         if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
    355           result = v;
    356           lastComputed = computed;
    357         }
    358       });
    359     }
    360     return result;
    361   };
    362 
    363   // Return the minimum element (or element-based computation).
    364   _.min = function(obj, iteratee, context) {
    365     var result = Infinity, lastComputed = Infinity,
    366         value, computed;
    367     if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
    368       obj = isArrayLike(obj) ? obj : _.values(obj);
    369       for (var i = 0, length = obj.length; i < length; i++) {
    370         value = obj[i];
    371         if (value != null && value < result) {
    372           result = value;
    373         }
    374       }
    375     } else {
    376       iteratee = cb(iteratee, context);
    377       _.each(obj, function(v, index, list) {
    378         computed = iteratee(v, index, list);
    379         if (computed < lastComputed || computed === Infinity && result === Infinity) {
    380           result = v;
    381           lastComputed = computed;
    382         }
    383       });
    384     }
    385     return result;
    386   };
    387 
    388   // Shuffle a collection.
    389   _.shuffle = function(obj) {
    390     return _.sample(obj, Infinity);
    391   };
    392 
    393   // Sample **n** random values from a collection using the modern version of the
    394   // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
    395   // If **n** is not specified, returns a single random element.
    396   // The internal `guard` argument allows it to work with `map`.
    397   _.sample = function(obj, n, guard) {
    398     if (n == null || guard) {
    399       if (!isArrayLike(obj)) obj = _.values(obj);
    400       return obj[_.random(obj.length - 1)];
    401     }
    402     var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);
    403     var length = getLength(sample);
    404     n = Math.max(Math.min(n, length), 0);
    405     var last = length - 1;
    406     for (var index = 0; index < n; index++) {
    407       var rand = _.random(index, last);
    408       var temp = sample[index];
    409       sample[index] = sample[rand];
    410       sample[rand] = temp;
    411     }
    412     return sample.slice(0, n);
    413   };
    414 
    415   // Sort the object's values by a criterion produced by an iteratee.
    416   _.sortBy = function(obj, iteratee, context) {
    417     var index = 0;
    418     iteratee = cb(iteratee, context);
    419     return _.pluck(_.map(obj, function(value, key, list) {
    420       return {
    421         value: value,
    422         index: index++,
    423         criteria: iteratee(value, key, list)
    424       };
    425     }).sort(function(left, right) {
    426       var a = left.criteria;
    427       var b = right.criteria;
    428       if (a !== b) {
    429         if (a > b || a === void 0) return 1;
    430         if (a < b || b === void 0) return -1;
    431       }
    432       return left.index - right.index;
    433     }), 'value');
    434   };
    435 
    436   // An internal function used for aggregate "group by" operations.
    437   var group = function(behavior, partition) {
    438     return function(obj, iteratee, context) {
    439       var result = partition ? [[], []] : {};
    440       iteratee = cb(iteratee, context);
    441       _.each(obj, function(value, index) {
    442         var key = iteratee(value, index, obj);
    443         behavior(result, value, key);
    444       });
    445       return result;
    446     };
    447   };
    448 
    449   // Groups the object's values by a criterion. Pass either a string attribute
    450   // to group by, or a function that returns the criterion.
    451   _.groupBy = group(function(result, value, key) {
    452     if (has(result, key)) result[key].push(value); else result[key] = [value];
    453   });
    454 
    455   // Indexes the object's values by a criterion, similar to `groupBy`, but for
    456   // when you know that your index values will be unique.
    457   _.indexBy = group(function(result, value, key) {
    458     result[key] = value;
    459   });
    460 
    461   // Counts instances of an object that group by a certain criterion. Pass
    462   // either a string attribute to count by, or a function that returns the
    463   // criterion.
    464   _.countBy = group(function(result, value, key) {
    465     if (has(result, key)) result[key]++; else result[key] = 1;
    466   });
    467 
    468   var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
    469   // Safely create a real, live array from anything iterable.
    470   _.toArray = function(obj) {
    471     if (!obj) return [];
    472     if (_.isArray(obj)) return slice.call(obj);
    473     if (_.isString(obj)) {
    474       // Keep surrogate pair characters together
    475       return obj.match(reStrSymbol);
    476     }
    477     if (isArrayLike(obj)) return _.map(obj, _.identity);
    478     return _.values(obj);
    479   };
    480 
    481   // Return the number of elements in an object.
    482   _.size = function(obj) {
    483     if (obj == null) return 0;
    484     return isArrayLike(obj) ? obj.length : _.keys(obj).length;
    485   };
    486 
    487   // Split a collection into two arrays: one whose elements all satisfy the given
    488   // predicate, and one whose elements all do not satisfy the predicate.
    489   _.partition = group(function(result, value, pass) {
    490     result[pass ? 0 : 1].push(value);
    491   }, true);
    492 
    493   // Array Functions
    494   // ---------------
    495 
    496   // Get the first element of an array. Passing **n** will return the first N
    497   // values in the array. Aliased as `head` and `take`. The **guard** check
    498   // allows it to work with `_.map`.
    499   _.first = _.head = _.take = function(array, n, guard) {
    500     if (array == null || array.length < 1) return n == null ? void 0 : [];
    501     if (n == null || guard) return array[0];
    502     return _.initial(array, array.length - n);
    503   };
    504 
    505   // Returns everything but the last entry of the array. Especially useful on
    506   // the arguments object. Passing **n** will return all the values in
    507   // the array, excluding the last N.
    508   _.initial = function(array, n, guard) {
    509     return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
    510   };
    511 
    512   // Get the last element of an array. Passing **n** will return the last N
    513   // values in the array.
    514   _.last = function(array, n, guard) {
    515     if (array == null || array.length < 1) return n == null ? void 0 : [];
    516     if (n == null || guard) return array[array.length - 1];
    517     return _.rest(array, Math.max(0, array.length - n));
    518   };
    519 
    520   // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
    521   // Especially useful on the arguments object. Passing an **n** will return
    522   // the rest N values in the array.
    523   _.rest = _.tail = _.drop = function(array, n, guard) {
    524     return slice.call(array, n == null || guard ? 1 : n);
    525   };
    526 
    527   // Trim out all falsy values from an array.
    528   _.compact = function(array) {
    529     return _.filter(array, Boolean);
    530   };
    531 
    532   // Internal implementation of a recursive `flatten` function.
    533   var flatten = function(input, shallow, strict, output) {
    534     output = output || [];
    535     var idx = output.length;
    536     for (var i = 0, length = getLength(input); i < length; i++) {
    537       var value = input[i];
    538       if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
    539         // Flatten current level of array or arguments object.
    540         if (shallow) {
    541           var j = 0, len = value.length;
    542           while (j < len) output[idx++] = value[j++];
    543         } else {
    544           flatten(value, shallow, strict, output);
    545           idx = output.length;
    546         }
    547       } else if (!strict) {
    548         output[idx++] = value;
    549       }
    550     }
    551     return output;
    552   };
    553 
    554   // Flatten out an array, either recursively (by default), or just one level.
    555   _.flatten = function(array, shallow) {
    556     return flatten(array, shallow, false);
    557   };
    558 
    559   // Return a version of the array that does not contain the specified value(s).
    560   _.without = restArguments(function(array, otherArrays) {
    561     return _.difference(array, otherArrays);
    562   });
    563 
    564   // Produce a duplicate-free version of the array. If the array has already
    565   // been sorted, you have the option of using a faster algorithm.
    566   // The faster algorithm will not work with an iteratee if the iteratee
    567   // is not a one-to-one function, so providing an iteratee will disable
    568   // the faster algorithm.
    569   // Aliased as `unique`.
    570   _.uniq = _.unique = function(array, isSorted, iteratee, context) {
    571     if (!_.isBoolean(isSorted)) {
    572       context = iteratee;
    573       iteratee = isSorted;
    574       isSorted = false;
    575     }
    576     if (iteratee != null) iteratee = cb(iteratee, context);
    577     var result = [];
    578     var seen = [];
    579     for (var i = 0, length = getLength(array); i < length; i++) {
    580       var value = array[i],
    581           computed = iteratee ? iteratee(value, i, array) : value;
    582       if (isSorted && !iteratee) {
    583         if (!i || seen !== computed) result.push(value);
    584         seen = computed;
    585       } else if (iteratee) {
    586         if (!_.contains(seen, computed)) {
    587           seen.push(computed);
    588           result.push(value);
    589         }
    590       } else if (!_.contains(result, value)) {
    591         result.push(value);
    592       }
    593     }
    594     return result;
    595   };
    596 
    597   // Produce an array that contains the union: each distinct element from all of
    598   // the passed-in arrays.
    599   _.union = restArguments(function(arrays) {
    600     return _.uniq(flatten(arrays, true, true));
    601   });
    602 
    603   // Produce an array that contains every item shared between all the
    604   // passed-in arrays.
    605   _.intersection = function(array) {
    606     var result = [];
    607     var argsLength = arguments.length;
    608     for (var i = 0, length = getLength(array); i < length; i++) {
    609       var item = array[i];
    610       if (_.contains(result, item)) continue;
    611       var j;
    612       for (j = 1; j < argsLength; j++) {
    613         if (!_.contains(arguments[j], item)) break;
    614       }
    615       if (j === argsLength) result.push(item);
    616     }
    617     return result;
    618   };
    619 
    620   // Take the difference between one array and a number of other arrays.
    621   // Only the elements present in just the first array will remain.
    622   _.difference = restArguments(function(array, rest) {
    623     rest = flatten(rest, true, true);
    624     return _.filter(array, function(value){
    625       return !_.contains(rest, value);
    626     });
    627   });
    628 
    629   // Complement of _.zip. Unzip accepts an array of arrays and groups
    630   // each array's elements on shared indices.
    631   _.unzip = function(array) {
    632     var length = array && _.max(array, getLength).length || 0;
    633     var result = Array(length);
    634 
    635     for (var index = 0; index < length; index++) {
    636       result[index] = _.pluck(array, index);
    637     }
    638     return result;
    639   };
    640 
    641   // Zip together multiple lists into a single array -- elements that share
    642   // an index go together.
    643   _.zip = restArguments(_.unzip);
    644 
    645   // Converts lists into objects. Pass either a single array of `[key, value]`
    646   // pairs, or two parallel arrays of the same length -- one of keys, and one of
    647   // the corresponding values. Passing by pairs is the reverse of _.pairs.
    648   _.object = function(list, values) {
    649     var result = {};
    650     for (var i = 0, length = getLength(list); i < length; i++) {
    651       if (values) {
    652         result[list[i]] = values[i];
    653       } else {
    654         result[list[i][0]] = list[i][1];
    655       }
    656     }
    657     return result;
    658   };
    659 
    660   // Generator function to create the findIndex and findLastIndex functions.
    661   var createPredicateIndexFinder = function(dir) {
    662     return function(array, predicate, context) {
    663       predicate = cb(predicate, context);
    664       var length = getLength(array);
    665       var index = dir > 0 ? 0 : length - 1;
    666       for (; index >= 0 && index < length; index += dir) {
    667         if (predicate(array[index], index, array)) return index;
    668       }
    669       return -1;
    670     };
    671   };
    672 
    673   // Returns the first index on an array-like that passes a predicate test.
    674   _.findIndex = createPredicateIndexFinder(1);
    675   _.findLastIndex = createPredicateIndexFinder(-1);
    676 
    677   // Use a comparator function to figure out the smallest index at which
    678   // an object should be inserted so as to maintain order. Uses binary search.
    679   _.sortedIndex = function(array, obj, iteratee, context) {
    680     iteratee = cb(iteratee, context, 1);
    681     var value = iteratee(obj);
    682     var low = 0, high = getLength(array);
    683     while (low < high) {
    684       var mid = Math.floor((low + high) / 2);
    685       if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
    686     }
    687     return low;
    688   };
    689 
    690   // Generator function to create the indexOf and lastIndexOf functions.
    691   var createIndexFinder = function(dir, predicateFind, sortedIndex) {
    692     return function(array, item, idx) {
    693       var i = 0, length = getLength(array);
    694       if (typeof idx == 'number') {
    695         if (dir > 0) {
    696           i = idx >= 0 ? idx : Math.max(idx + length, i);
    697         } else {
    698           length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
    699         }
    700       } else if (sortedIndex && idx && length) {
    701         idx = sortedIndex(array, item);
    702         return array[idx] === item ? idx : -1;
    703       }
    704       if (item !== item) {
    705         idx = predicateFind(slice.call(array, i, length), _.isNaN);
    706         return idx >= 0 ? idx + i : -1;
    707       }
    708       for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
    709         if (array[idx] === item) return idx;
    710       }
    711       return -1;
    712     };
    713   };
    714 
    715   // Return the position of the first occurrence of an item in an array,
    716   // or -1 if the item is not included in the array.
    717   // If the array is large and already in sort order, pass `true`
    718   // for **isSorted** to use binary search.
    719   _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);
    720   _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);
    721 
    722   // Generate an integer Array containing an arithmetic progression. A port of
    723   // the native Python `range()` function. See
    724   // [the Python documentation](http://docs.python.org/library/functions.html#range).
    725   _.range = function(start, stop, step) {
    726     if (stop == null) {
    727       stop = start || 0;
    728       start = 0;
    729     }
    730     if (!step) {
    731       step = stop < start ? -1 : 1;
    732     }
    733 
    734     var length = Math.max(Math.ceil((stop - start) / step), 0);
    735     var range = Array(length);
    736 
    737     for (var idx = 0; idx < length; idx++, start += step) {
    738       range[idx] = start;
    739     }
    740 
    741     return range;
    742   };
    743 
    744   // Chunk a single array into multiple arrays, each containing `count` or fewer
    745   // items.
    746   _.chunk = function(array, count) {
    747     if (count == null || count < 1) return [];
    748     var result = [];
    749     var i = 0, length = array.length;
    750     while (i < length) {
    751       result.push(slice.call(array, i, i += count));
    752     }
    753     return result;
    754   };
    755 
    756   // Function (ahem) Functions
    757   // ------------------
    758 
    759   // Determines whether to execute a function as a constructor
    760   // or a normal function with the provided arguments.
    761   var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
    762     if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
    763     var self = baseCreate(sourceFunc.prototype);
    764     var result = sourceFunc.apply(self, args);
    765     if (_.isObject(result)) return result;
    766     return self;
    767   };
    768 
    769   // Create a function bound to a given object (assigning `this`, and arguments,
    770   // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
    771   // available.
    772   _.bind = restArguments(function(func, context, args) {
    773     if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
    774     var bound = restArguments(function(callArgs) {
    775       return executeBound(func, bound, context, this, args.concat(callArgs));
    776     });
    777     return bound;
    778   });
    779 
    780   // Partially apply a function by creating a version that has had some of its
    781   // arguments pre-filled, without changing its dynamic `this` context. _ acts
    782   // as a placeholder by default, allowing any combination of arguments to be
    783   // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
    784   _.partial = restArguments(function(func, boundArgs) {
    785     var placeholder = _.partial.placeholder;
    786     var bound = function() {
    787       var position = 0, length = boundArgs.length;
    788       var args = Array(length);
    789       for (var i = 0; i < length; i++) {
    790         args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
    791       }
    792       while (position < arguments.length) args.push(arguments[position++]);
    793       return executeBound(func, bound, this, this, args);
    794     };
    795     return bound;
    796   });
    797 
    798   _.partial.placeholder = _;
    799 
    800   // Bind a number of an object's methods to that object. Remaining arguments
    801   // are the method names to be bound. Useful for ensuring that all callbacks
    802   // defined on an object belong to it.
    803   _.bindAll = restArguments(function(obj, keys) {
    804     keys = flatten(keys, false, false);
    805     var index = keys.length;
    806     if (index < 1) throw new Error('bindAll must be passed function names');
    807     while (index--) {
    808       var key = keys[index];
    809       obj[key] = _.bind(obj[key], obj);
    810     }
    811   });
    812 
    813   // Memoize an expensive function by storing its results.
    814   _.memoize = function(func, hasher) {
    815     var memoize = function(key) {
    816       var cache = memoize.cache;
    817       var address = '' + (hasher ? hasher.apply(this, arguments) : key);
    818       if (!has(cache, address)) cache[address] = func.apply(this, arguments);
    819       return cache[address];
    820     };
    821     memoize.cache = {};
    822     return memoize;
    823   };
    824 
    825   // Delays a function for the given number of milliseconds, and then calls
    826   // it with the arguments supplied.
    827   _.delay = restArguments(function(func, wait, args) {
    828     return setTimeout(function() {
    829       return func.apply(null, args);
    830     }, wait);
    831   });
    832 
    833   // Defers a function, scheduling it to run after the current call stack has
    834   // cleared.
    835   _.defer = _.partial(_.delay, _, 1);
    836 
    837   // Returns a function, that, when invoked, will only be triggered at most once
    838   // during a given window of time. Normally, the throttled function will run
    839   // as much as it can, without ever going more than once per `wait` duration;
    840   // but if you'd like to disable the execution on the leading edge, pass
    841   // `{leading: false}`. To disable execution on the trailing edge, ditto.
    842   _.throttle = function(func, wait, options) {
    843     var timeout, context, args, result;
    844     var previous = 0;
    845     if (!options) options = {};
    846 
    847     var later = function() {
    848       previous = options.leading === false ? 0 : _.now();
    849       timeout = null;
    850       result = func.apply(context, args);
    851       if (!timeout) context = args = null;
    852     };
    853 
    854     var throttled = function() {
    855       var now = _.now();
    856       if (!previous && options.leading === false) previous = now;
    857       var remaining = wait - (now - previous);
    858       context = this;
    859       args = arguments;
    860       if (remaining <= 0 || remaining > wait) {
    861         if (timeout) {
    862           clearTimeout(timeout);
    863           timeout = null;
    864         }
    865         previous = now;
    866         result = func.apply(context, args);
    867         if (!timeout) context = args = null;
    868       } else if (!timeout && options.trailing !== false) {
    869         timeout = setTimeout(later, remaining);
    870       }
    871       return result;
    872     };
    873 
    874     throttled.cancel = function() {
    875       clearTimeout(timeout);
    876       previous = 0;
    877       timeout = context = args = null;
    878     };
    879 
    880     return throttled;
    881   };
    882 
    883   // Returns a function, that, as long as it continues to be invoked, will not
    884   // be triggered. The function will be called after it stops being called for
    885   // N milliseconds. If `immediate` is passed, trigger the function on the
    886   // leading edge, instead of the trailing.
    887   _.debounce = function(func, wait, immediate) {
    888     var timeout, result;
    889 
    890     var later = function(context, args) {
    891       timeout = null;
    892       if (args) result = func.apply(context, args);
    893     };
    894 
    895     var debounced = restArguments(function(args) {
    896       if (timeout) clearTimeout(timeout);
    897       if (immediate) {
    898         var callNow = !timeout;
    899         timeout = setTimeout(later, wait);
    900         if (callNow) result = func.apply(this, args);
    901       } else {
    902         timeout = _.delay(later, wait, this, args);
    903       }
    904 
    905       return result;
    906     });
    907 
    908     debounced.cancel = function() {
    909       clearTimeout(timeout);
    910       timeout = null;
    911     };
    912 
    913     return debounced;
    914   };
    915 
    916   // Returns the first function passed as an argument to the second,
    917   // allowing you to adjust arguments, run code before and after, and
    918   // conditionally execute the original function.
    919   _.wrap = function(func, wrapper) {
    920     return _.partial(wrapper, func);
    921   };
    922 
    923   // Returns a negated version of the passed-in predicate.
    924   _.negate = function(predicate) {
    925     return function() {
    926       return !predicate.apply(this, arguments);
    927     };
    928   };
    929 
    930   // Returns a function that is the composition of a list of functions, each
    931   // consuming the return value of the function that follows.
    932   _.compose = function() {
    933     var args = arguments;
    934     var start = args.length - 1;
    935     return function() {
    936       var i = start;
    937       var result = args[start].apply(this, arguments);
    938       while (i--) result = args[i].call(this, result);
    939       return result;
    940     };
    941   };
    942 
    943   // Returns a function that will only be executed on and after the Nth call.
    944   _.after = function(times, func) {
    945     return function() {
    946       if (--times < 1) {
    947         return func.apply(this, arguments);
    948       }
    949     };
    950   };
    951 
    952   // Returns a function that will only be executed up to (but not including) the Nth call.
    953   _.before = function(times, func) {
    954     var memo;
    955     return function() {
    956       if (--times > 0) {
    957         memo = func.apply(this, arguments);
    958       }
    959       if (times <= 1) func = null;
    960       return memo;
    961     };
    962   };
    963 
    964   // Returns a function that will be executed at most one time, no matter how
    965   // often you call it. Useful for lazy initialization.
    966   _.once = _.partial(_.before, 2);
    967 
    968   _.restArguments = restArguments;
    969 
    970   // Object Functions
    971   // ----------------
    972 
    973   // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
    974   var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
    975   var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
    976     'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
    977 
    978   var collectNonEnumProps = function(obj, keys) {
    979     var nonEnumIdx = nonEnumerableProps.length;
    980     var constructor = obj.constructor;
    981     var proto = _.isFunction(constructor) && constructor.prototype || ObjProto;
    982 
    983     // Constructor is a special case.
    984     var prop = 'constructor';
    985     if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
    986 
    987     while (nonEnumIdx--) {
    988       prop = nonEnumerableProps[nonEnumIdx];
    989       if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
    990         keys.push(prop);
    991       }
    992     }
    993   };
    994 
    995   // Retrieve the names of an object's own properties.
    996   // Delegates to **ECMAScript 5**'s native `Object.keys`.
    997   _.keys = function(obj) {
    998     if (!_.isObject(obj)) return [];
    999     if (nativeKeys) return nativeKeys(obj);
    1000     var keys = [];
    1001     for (var key in obj) if (has(obj, key)) keys.push(key);
    1002     // Ahem, IE < 9.
    1003     if (hasEnumBug) collectNonEnumProps(obj, keys);
    1004     return keys;
    1005   };
    1006 
    1007   // Retrieve all the property names of an object.
    1008   _.allKeys = function(obj) {
    1009     if (!_.isObject(obj)) return [];
    1010     var keys = [];
    1011     for (var key in obj) keys.push(key);
    1012     // Ahem, IE < 9.
    1013     if (hasEnumBug) collectNonEnumProps(obj, keys);
    1014     return keys;
    1015   };
    1016 
    1017   // Retrieve the values of an object's properties.
    1018   _.values = function(obj) {
    1019     var keys = _.keys(obj);
    1020     var length = keys.length;
    1021     var values = Array(length);
    1022     for (var i = 0; i < length; i++) {
    1023       values[i] = obj[keys[i]];
    1024     }
    1025     return values;
    1026   };
    1027 
    1028   // Returns the results of applying the iteratee to each element of the object.
    1029   // In contrast to _.map it returns an object.
    1030   _.mapObject = function(obj, iteratee, context) {
    1031     iteratee = cb(iteratee, context);
    1032     var keys = _.keys(obj),
    1033         length = keys.length,
    1034         results = {};
    1035     for (var index = 0; index < length; index++) {
    1036       var currentKey = keys[index];
    1037       results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
    1038     }
    1039     return results;
    1040   };
    1041 
    1042   // Convert an object into a list of `[key, value]` pairs.
    1043   // The opposite of _.object.
    1044   _.pairs = function(obj) {
    1045     var keys = _.keys(obj);
    1046     var length = keys.length;
    1047     var pairs = Array(length);
    1048     for (var i = 0; i < length; i++) {
    1049       pairs[i] = [keys[i], obj[keys[i]]];
    1050     }
    1051     return pairs;
    1052   };
    1053 
    1054   // Invert the keys and values of an object. The values must be serializable.
    1055   _.invert = function(obj) {
    1056     var result = {};
    1057     var keys = _.keys(obj);
    1058     for (var i = 0, length = keys.length; i < length; i++) {
    1059       result[obj[keys[i]]] = keys[i];
    1060     }
    1061     return result;
    1062   };
    1063 
    1064   // Return a sorted list of the function names available on the object.
    1065   // Aliased as `methods`.
    1066   _.functions = _.methods = function(obj) {
    1067     var names = [];
    1068     for (var key in obj) {
    1069       if (_.isFunction(obj[key])) names.push(key);
    1070     }
    1071     return names.sort();
    1072   };
    1073 
    1074   // An internal function for creating assigner functions.
    1075   var createAssigner = function(keysFunc, defaults) {
    1076     return function(obj) {
    1077       var length = arguments.length;
    1078       if (defaults) obj = Object(obj);
    1079       if (length < 2 || obj == null) return obj;
    1080       for (var index = 1; index < length; index++) {
    1081         var source = arguments[index],
    1082             keys = keysFunc(source),
    1083             l = keys.length;
    1084         for (var i = 0; i < l; i++) {
    1085           var key = keys[i];
    1086           if (!defaults || obj[key] === void 0) obj[key] = source[key];
    1087         }
    1088       }
    1089       return obj;
    1090     };
    1091   };
    1092 
    1093   // Extend a given object with all the properties in passed-in object(s).
    1094   _.extend = createAssigner(_.allKeys);
    1095 
    1096   // Assigns a given object with all the own properties in the passed-in object(s).
    1097   // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
    1098   _.extendOwn = _.assign = createAssigner(_.keys);
    1099 
    1100   // Returns the first key on an object that passes a predicate test.
    1101   _.findKey = function(obj, predicate, context) {
    1102     predicate = cb(predicate, context);
    1103     var keys = _.keys(obj), key;
    1104     for (var i = 0, length = keys.length; i < length; i++) {
    1105       key = keys[i];
    1106       if (predicate(obj[key], key, obj)) return key;
    1107     }
    1108   };
    1109 
    1110   // Internal pick helper function to determine if `obj` has key `key`.
    1111   var keyInObj = function(value, key, obj) {
    1112     return key in obj;
    1113   };
    1114 
    1115   // Return a copy of the object only containing the whitelisted properties.
    1116   _.pick = restArguments(function(obj, keys) {
    1117     var result = {}, iteratee = keys[0];
    1118     if (obj == null) return result;
    1119     if (_.isFunction(iteratee)) {
    1120       if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
    1121       keys = _.allKeys(obj);
    1122     } else {
    1123       iteratee = keyInObj;
    1124       keys = flatten(keys, false, false);
    1125       obj = Object(obj);
    1126     }
    1127     for (var i = 0, length = keys.length; i < length; i++) {
    1128       var key = keys[i];
    1129       var value = obj[key];
    1130       if (iteratee(value, key, obj)) result[key] = value;
    1131     }
    1132     return result;
    1133   });
    1134 
    1135   // Return a copy of the object without the blacklisted properties.
    1136   _.omit = restArguments(function(obj, keys) {
    1137     var iteratee = keys[0], context;
    1138     if (_.isFunction(iteratee)) {
    1139       iteratee = _.negate(iteratee);
    1140       if (keys.length > 1) context = keys[1];
    1141     } else {
    1142       keys = _.map(flatten(keys, false, false), String);
    1143       iteratee = function(value, key) {
    1144         return !_.contains(keys, key);
    1145       };
    1146     }
    1147     return _.pick(obj, iteratee, context);
    1148   });
    1149 
    1150   // Fill in a given object with default properties.
    1151   _.defaults = createAssigner(_.allKeys, true);
    1152 
    1153   // Creates an object that inherits from the given prototype object.
    1154   // If additional properties are provided then they will be added to the
    1155   // created object.
    1156   _.create = function(prototype, props) {
    1157     var result = baseCreate(prototype);
    1158     if (props) _.extendOwn(result, props);
    1159     return result;
    1160   };
    1161 
    1162   // Create a (shallow-cloned) duplicate of an object.
    1163   _.clone = function(obj) {
    1164     if (!_.isObject(obj)) return obj;
    1165     return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
    1166   };
    1167 
    1168   // Invokes interceptor with the obj, and then returns obj.
    1169   // The primary purpose of this method is to "tap into" a method chain, in
    1170   // order to perform operations on intermediate results within the chain.
    1171   _.tap = function(obj, interceptor) {
    1172     interceptor(obj);
    1173     return obj;
    1174   };
    1175 
    1176   // Returns whether an object has a given set of `key:value` pairs.
    1177   _.isMatch = function(object, attrs) {
    1178     var keys = _.keys(attrs), length = keys.length;
    1179     if (object == null) return !length;
    1180     var obj = Object(object);
    1181     for (var i = 0; i < length; i++) {
    1182       var key = keys[i];
    1183       if (attrs[key] !== obj[key] || !(key in obj)) return false;
    1184     }
    1185     return true;
    1186   };
    1187 
    1188 
    1189   // Internal recursive comparison function for `isEqual`.
    1190   var eq, deepEq;
    1191   eq = function(a, b, aStack, bStack) {
    1192     // Identical objects are equal. `0 === -0`, but they aren't identical.
    1193     // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
    1194     if (a === b) return a !== 0 || 1 / a === 1 / b;
    1195     // `null` or `undefined` only equal to itself (strict comparison).
    1196     if (a == null || b == null) return false;
    1197     // `NaN`s are equivalent, but non-reflexive.
    1198     if (a !== a) return b !== b;
    1199     // Exhaust primitive checks
    1200     var type = typeof a;
    1201     if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
    1202     return deepEq(a, b, aStack, bStack);
    1203   };
    1204 
    1205   // Internal recursive comparison function for `isEqual`.
    1206   deepEq = function(a, b, aStack, bStack) {
    1207     // Unwrap any wrapped objects.
    1208     if (a instanceof _) a = a._wrapped;
    1209     if (b instanceof _) b = b._wrapped;
    1210     // Compare `[[Class]]` names.
    1211     var className = toString.call(a);
    1212     if (className !== toString.call(b)) return false;
    1213     switch (className) {
    1214       // Strings, numbers, regular expressions, dates, and booleans are compared by value.
    1215       case '[object RegExp]':
    1216       // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
    1217       case '[object String]':
    1218         // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
    1219         // equivalent to `new String("5")`.
    1220         return '' + a === '' + b;
    1221       case '[object Number]':
    1222         // `NaN`s are equivalent, but non-reflexive.
    1223         // Object(NaN) is equivalent to NaN.
    1224         if (+a !== +a) return +b !== +b;
    1225         // An `egal` comparison is performed for other numeric values.
    1226         return +a === 0 ? 1 / +a === 1 / b : +a === +b;
    1227       case '[object Date]':
    1228       case '[object Boolean]':
    1229         // Coerce dates and booleans to numeric primitive values. Dates are compared by their
    1230         // millisecond representations. Note that invalid dates with millisecond representations
    1231         // of `NaN` are not equivalent.
    1232         return +a === +b;
    1233       case '[object Symbol]':
    1234         return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
    1235     }
    1236 
    1237     var areArrays = className === '[object Array]';
    1238     if (!areArrays) {
    1239       if (typeof a != 'object' || typeof b != 'object') return false;
    1240 
    1241       // Objects with different constructors are not equivalent, but `Object`s or `Array`s
    1242       // from different frames are.
    1243       var aCtor = a.constructor, bCtor = b.constructor;
    1244       if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
    1245                                _.isFunction(bCtor) && bCtor instanceof bCtor)
    1246                           && ('constructor' in a && 'constructor' in b)) {
    1247         return false;
    1248       }
    1249     }
    1250     // Assume equality for cyclic structures. The algorithm for detecting cyclic
    1251     // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
    1252 
    1253     // Initializing stack of traversed objects.
    1254     // It's done here since we only need them for objects and arrays comparison.
    1255     aStack = aStack || [];
    1256     bStack = bStack || [];
    1257     var length = aStack.length;
    1258     while (length--) {
    1259       // Linear search. Performance is inversely proportional to the number of
    1260       // unique nested structures.
    1261       if (aStack[length] === a) return bStack[length] === b;
    1262     }
    1263 
    1264     // Add the first object to the stack of traversed objects.
    1265     aStack.push(a);
    1266     bStack.push(b);
    1267 
    1268     // Recursively compare objects and arrays.
    1269     if (areArrays) {
    1270       // Compare array lengths to determine if a deep comparison is necessary.
    1271       length = a.length;
    1272       if (length !== b.length) return false;
    1273       // Deep compare the contents, ignoring non-numeric properties.
    1274       while (length--) {
    1275         if (!eq(a[length], b[length], aStack, bStack)) return false;
    1276       }
    1277     } else {
    1278       // Deep compare objects.
    1279       var keys = _.keys(a), key;
    1280       length = keys.length;
    1281       // Ensure that both objects contain the same number of properties before comparing deep equality.
    1282       if (_.keys(b).length !== length) return false;
    1283       while (length--) {
    1284         // Deep compare each member
    1285         key = keys[length];
    1286         if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
    1287       }
    1288     }
    1289     // Remove the first object from the stack of traversed objects.
    1290     aStack.pop();
    1291     bStack.pop();
    1292     return true;
    1293   };
    1294 
    1295   // Perform a deep comparison to check if two objects are equal.
    1296   _.isEqual = function(a, b) {
    1297     return eq(a, b);
    1298   };
    1299 
    1300   // Is a given array, string, or object empty?
    1301   // An "empty" object has no enumerable own-properties.
    1302   _.isEmpty = function(obj) {
    1303     if (obj == null) return true;
    1304     if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
    1305     return _.keys(obj).length === 0;
    1306   };
    1307 
    1308   // Is a given value a DOM element?
    1309   _.isElement = function(obj) {
    1310     return !!(obj && obj.nodeType === 1);
    1311   };
    1312 
    1313   // Is a given value an array?
    1314   // Delegates to ECMA5's native Array.isArray
    1315   _.isArray = nativeIsArray || function(obj) {
    1316     return toString.call(obj) === '[object Array]';
    1317   };
    1318 
    1319   // Is a given variable an object?
    1320   _.isObject = function(obj) {
    1321     var type = typeof obj;
    1322     return type === 'function' || type === 'object' && !!obj;
    1323   };
    1324 
    1325   // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.
    1326   _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) {
    1327     _['is' + name] = function(obj) {
    1328       return toString.call(obj) === '[object ' + name + ']';
    1329     };
    1330   });
    1331 
    1332   // Define a fallback version of the method in browsers (ahem, IE < 9), where
    1333   // there isn't any inspectable "Arguments" type.
    1334   if (!_.isArguments(arguments)) {
    1335     _.isArguments = function(obj) {
    1336       return has(obj, 'callee');
    1337     };
    1338   }
    1339 
    1340   // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
    1341   // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
    1342   var nodelist = root.document && root.document.childNodes;
    1343   if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
    1344     _.isFunction = function(obj) {
    1345       return typeof obj == 'function' || false;
    1346     };
    1347   }
    1348 
    1349   // Is a given object a finite number?
    1350   _.isFinite = function(obj) {
    1351     return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));
    1352   };
    1353 
    1354   // Is the given value `NaN`?
    1355   _.isNaN = function(obj) {
    1356     return _.isNumber(obj) && isNaN(obj);
    1357   };
    1358 
    1359   // Is a given value a boolean?
    1360   _.isBoolean = function(obj) {
    1361     return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
    1362   };
    1363 
    1364   // Is a given value equal to null?
    1365   _.isNull = function(obj) {
    1366     return obj === null;
    1367   };
    1368 
    1369   // Is a given variable undefined?
    1370   _.isUndefined = function(obj) {
    1371     return obj === void 0;
    1372   };
    1373 
    1374   // Shortcut function for checking if an object has a given property directly
    1375   // on itself (in other words, not on a prototype).
    1376   _.has = function(obj, path) {
    1377     if (!_.isArray(path)) {
    1378       return has(obj, path);
    1379     }
    1380     var length = path.length;
    1381     for (var i = 0; i < length; i++) {
    1382       var key = path[i];
    1383       if (obj == null || !hasOwnProperty.call(obj, key)) {
    1384         return false;
    1385       }
    1386       obj = obj[key];
    1387     }
    1388     return !!length;
    1389   };
    1390 
    1391   // Utility Functions
    1392   // -----------------
    1393 
    1394   // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
    1395   // previous owner. Returns a reference to the Underscore object.
    1396   _.noConflict = function() {
    1397     root._ = previousUnderscore;
    1398     return this;
    1399   };
    1400 
    1401   // Keep the identity function around for default iteratees.
    1402   _.identity = function(value) {
    1403     return value;
    1404   };
    1405 
    1406   // Predicate-generating functions. Often useful outside of Underscore.
    1407   _.constant = function(value) {
    1408     return function() {
    1409       return value;
    1410     };
    1411   };
    1412 
    1413   _.noop = function(){};
    1414 
    1415   // Creates a function that, when passed an object, will traverse that object’s
    1416   // properties down the given `path`, specified as an array of keys or indexes.
    1417   _.property = function(path) {
    1418     if (!_.isArray(path)) {
    1419       return shallowProperty(path);
    1420     }
    1421     return function(obj) {
    1422       return deepGet(obj, path);
    1423     };
    1424   };
    1425 
    1426   // Generates a function for a given object that returns a given property.
    1427   _.propertyOf = function(obj) {
    1428     if (obj == null) {
    1429       return function(){};
    1430     }
    1431     return function(path) {
    1432       return !_.isArray(path) ? obj[path] : deepGet(obj, path);
    1433     };
    1434   };
    1435 
    1436   // Returns a predicate for checking whether an object has a given set of
    1437   // `key:value` pairs.
    1438   _.matcher = _.matches = function(attrs) {
    1439     attrs = _.extendOwn({}, attrs);
    1440     return function(obj) {
    1441       return _.isMatch(obj, attrs);
    1442     };
    1443   };
    1444 
    1445   // Run a function **n** times.
    1446   _.times = function(n, iteratee, context) {
    1447     var accum = Array(Math.max(0, n));
    1448     iteratee = optimizeCb(iteratee, context, 1);
    1449     for (var i = 0; i < n; i++) accum[i] = iteratee(i);
    1450     return accum;
    1451   };
    1452 
    1453   // Return a random integer between min and max (inclusive).
    1454   _.random = function(min, max) {
    1455     if (max == null) {
    1456       max = min;
    1457       min = 0;
    1458     }
    1459     return min + Math.floor(Math.random() * (max - min + 1));
    1460   };
    1461 
    1462   // A (possibly faster) way to get the current timestamp as an integer.
    1463   _.now = Date.now || function() {
    1464     return new Date().getTime();
    1465   };
    1466 
    1467   // List of HTML entities for escaping.
    1468   var escapeMap = {
    1469     '&': '&amp;',
    1470     '<': '&lt;',
    1471     '>': '&gt;',
    1472     '"': '&quot;',
    1473     "'": '&#x27;',
    1474     '`': '&#x60;'
    1475   };
    1476   var unescapeMap = _.invert(escapeMap);
    1477 
    1478   // Functions for escaping and unescaping strings to/from HTML interpolation.
    1479   var createEscaper = function(map) {
    1480     var escaper = function(match) {
    1481       return map[match];
    1482     };
    1483     // Regexes for identifying a key that needs to be escaped.
    1484     var source = '(?:' + _.keys(map).join('|') + ')';
    1485     var testRegexp = RegExp(source);
    1486     var replaceRegexp = RegExp(source, 'g');
    1487     return function(string) {
    1488       string = string == null ? '' : '' + string;
    1489       return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
    1490     };
    1491   };
    1492   _.escape = createEscaper(escapeMap);
    1493   _.unescape = createEscaper(unescapeMap);
    1494 
    1495   // Traverses the children of `obj` along `path`. If a child is a function, it
    1496   // is invoked with its parent as context. Returns the value of the final
    1497   // child, or `fallback` if any child is undefined.
    1498   _.result = function(obj, path, fallback) {
    1499     if (!_.isArray(path)) path = [path];
    1500     var length = path.length;
    1501     if (!length) {
    1502       return _.isFunction(fallback) ? fallback.call(obj) : fallback;
    1503     }
    1504     for (var i = 0; i < length; i++) {
    1505       var prop = obj == null ? void 0 : obj[path[i]];
    1506       if (prop === void 0) {
    1507         prop = fallback;
    1508         i = length; // Ensure we don't continue iterating.
    1509       }
    1510       obj = _.isFunction(prop) ? prop.call(obj) : prop;
    1511     }
    1512     return obj;
    1513   };
    1514 
    1515   // Generate a unique integer id (unique within the entire client session).
    1516   // Useful for temporary DOM ids.
    1517   var idCounter = 0;
    1518   _.uniqueId = function(prefix) {
    1519     var id = ++idCounter + '';
    1520     return prefix ? prefix + id : id;
    1521   };
    1522 
    1523   // By default, Underscore uses ERB-style template delimiters, change the
    1524   // following template settings to use alternative delimiters.
    1525   _.templateSettings = {
    1526     evaluate: /<%([\s\S]+?)%>/g,
    1527     interpolate: /<%=([\s\S]+?)%>/g,
    1528     escape: /<%-([\s\S]+?)%>/g
    1529   };
    1530 
    1531   // When customizing `templateSettings`, if you don't want to define an
    1532   // interpolation, evaluation or escaping regex, we need one that is
    1533   // guaranteed not to match.
    1534   var noMatch = /(.)^/;
    1535 
    1536   // Certain characters need to be escaped so that they can be put into a
    1537   // string literal.
    1538   var escapes = {
    1539     "'": "'",
    1540     '\\': '\\',
    1541     '\r': 'r',
    1542     '\n': 'n',
    1543     '\u2028': 'u2028',
    1544     '\u2029': 'u2029'
    1545   };
    1546 
    1547   var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
    1548 
    1549   var escapeChar = function(match) {
    1550     return '\\' + escapes[match];
    1551   };
    1552 
    1553   // JavaScript micro-templating, similar to John Resig's implementation.
    1554   // Underscore templating handles arbitrary delimiters, preserves whitespace,
    1555   // and correctly escapes quotes within interpolated code.
    1556   // NB: `oldSettings` only exists for backwards compatibility.
    1557   _.template = function(text, settings, oldSettings) {
    1558     if (!settings && oldSettings) settings = oldSettings;
    1559     settings = _.defaults({}, settings, _.templateSettings);
    1560 
    1561     // Combine delimiters into one regular expression via alternation.
    1562     var matcher = RegExp([
    1563       (settings.escape || noMatch).source,
    1564       (settings.interpolate || noMatch).source,
    1565       (settings.evaluate || noMatch).source
    1566     ].join('|') + '|$', 'g');
    1567 
    1568     // Compile the template source, escaping string literals appropriately.
    1569     var index = 0;
    1570     var source = "__p+='";
    1571     text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
    1572       source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
    1573       index = offset + match.length;
    1574 
    1575       if (escape) {
    1576         source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
    1577       } else if (interpolate) {
    1578         source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
    1579       } else if (evaluate) {
    1580         source += "';\n" + evaluate + "\n__p+='";
    1581       }
    1582 
    1583       // Adobe VMs need the match returned to produce the correct offset.
    1584       return match;
    1585     });
    1586     source += "';\n";
    1587 
    1588     // If a variable is not specified, place data values in local scope.
    1589     if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
    1590 
    1591     source = "var __t,__p='',__j=Array.prototype.join," +
    1592       "print=function(){__p+=__j.call(arguments,'');};\n" +
    1593       source + 'return __p;\n';
    1594 
    1595     var render;
    1596     try {
    1597       render = new Function(settings.variable || 'obj', '_', source);
    1598     } catch (e) {
    1599       e.source = source;
    1600       throw e;
    1601     }
    1602 
    1603     var template = function(data) {
    1604       return render.call(this, data, _);
    1605     };
    1606 
    1607     // Provide the compiled source as a convenience for precompilation.
    1608     var argument = settings.variable || 'obj';
    1609     template.source = 'function(' + argument + '){\n' + source + '}';
    1610 
    1611     return template;
    1612   };
    1613 
    1614   // Add a "chain" function. Start chaining a wrapped Underscore object.
    1615   _.chain = function(obj) {
    1616     var instance = _(obj);
    1617     instance._chain = true;
    1618     return instance;
    1619   };
    1620 
    1621   // OOP
    1622   // ---------------
    1623   // If Underscore is called as a function, it returns a wrapped object that
    1624   // can be used OO-style. This wrapper holds altered versions of all the
    1625   // underscore functions. Wrapped objects may be chained.
    1626 
    1627   // Helper function to continue chaining intermediate results.
    1628   var chainResult = function(instance, obj) {
    1629     return instance._chain ? _(obj).chain() : obj;
    1630   };
    1631 
    1632   // Add your own custom functions to the Underscore object.
    1633   _.mixin = function(obj) {
    1634     _.each(_.functions(obj), function(name) {
    1635       var func = _[name] = obj[name];
    1636       _.prototype[name] = function() {
    1637         var args = [this._wrapped];
    1638         push.apply(args, arguments);
    1639         return chainResult(this, func.apply(_, args));
    1640       };
    1641     });
    1642     return _;
    1643   };
    1644 
    1645   // Add all of the Underscore functions to the wrapper object.
    1646   _.mixin(_);
    1647 
    1648   // Add all mutator Array functions to the wrapper.
    1649   _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
    1650     var method = ArrayProto[name];
    1651     _.prototype[name] = function() {
    1652       var obj = this._wrapped;
    1653       method.apply(obj, arguments);
    1654       if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
    1655       return chainResult(this, obj);
    1656     };
    1657   });
    1658 
    1659   // Add all accessor Array functions to the wrapper.
    1660   _.each(['concat', 'join', 'slice'], function(name) {
    1661     var method = ArrayProto[name];
    1662     _.prototype[name] = function() {
    1663       return chainResult(this, method.apply(this._wrapped, arguments));
    1664     };
    1665   });
    1666 
    1667   // Extracts the result from a wrapped and chained object.
    1668   _.prototype.value = function() {
    1669     return this._wrapped;
    1670   };
    1671 
    1672   // Provide unwrapping proxy for some methods used in engine operations
    1673   // such as arithmetic and JSON stringification.
    1674   _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
    1675 
    1676   _.prototype.toString = function() {
    1677     return String(this._wrapped);
    1678   };
    1679 
    1680   // AMD registration happens at the end for compatibility with AMD loaders
    1681   // that may not enforce next-turn semantics on modules. Even though general
    1682   // practice for AMD registration is to be anonymous, underscore registers
    1683   // as a named module because, like jQuery, it is a base library that is
    1684   // popular enough to be bundled in a third party lib, but not be part of
    1685   // an AMD load request. Those cases could generate an error when an
    1686   // anonymous define() is called outside of a loader request.
    1687   if (typeof define == 'function' && define.amd) {
    1688     define('underscore', [], function() {
    1689       return _;
    1690     });
    1691   }
    1692 }());
     6var n="1.13.1",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,d=isFinite,g=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u<t;u++)e[u]=arguments[u+r];switch(r){case 0:return n.call(this,e);case 1:return n.call(this,arguments[0],e);case 2:return n.call(this,arguments[0],arguments[1],e)}var o=Array(r+1);for(u=0;u<r;u++)o[u]=arguments[u];return o[r]=e,n.apply(this,o)}}function _(n){var r=typeof n;return"function"===r||"object"===r&&!!n}function w(n){return void 0===n}function A(n){return!0===n||!1===n||"[object Boolean]"===a.call(n)}function x(n){var r="[object "+n+"]";return function(n){return a.call(n)===r}}var S=x("String"),O=x("Number"),M=x("Date"),E=x("RegExp"),B=x("Error"),N=x("Symbol"),I=x("ArrayBuffer"),T=x("Function"),k=r.document&&r.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof k&&(T=function(n){return"function"==typeof n||!1});var D=T,R=x("Object"),F=l&&R(new DataView(new ArrayBuffer(8))),V="undefined"!=typeof Map&&R(new Map),P=x("DataView");var q=F?function(n){return null!=n&&D(n.getInt8)&&I(n.buffer)}:P,U=s||x("Array");function W(n,r){return null!=n&&f.call(n,r)}var z=x("Arguments");!function(){z(arguments)||(z=function(n){return W(n,"callee")})}();var L=z;function $(n){return O(n)&&y(n)}function C(n){return function(){return n}}function K(n){return function(r){var t=n(r);return"number"==typeof t&&t>=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e<t;++e)r[n[e]]=!0;return{contains:function(n){return r[n]},push:function(t){return r[t]=!0,n.push(t)}}}(r);var t=b.length,u=n.constructor,o=D(u)&&u.prototype||e,i="constructor";for(W(n,i)&&!r.contains(i)&&r.push(i);t--;)(i=b[t])in n&&n[i]!==o[i]&&!r.contains(i)&&r.push(i)}function nn(n){if(!_(n))return[];if(p)return p(n);var r=[];for(var t in n)W(n,t)&&r.push(t);return g&&Z(n,r),r}function rn(n,r){var t=nn(r),e=t.length;if(null==n)return!e;for(var u=Object(n),o=0;o<e;o++){var i=t[o];if(r[i]!==u[i]||!(i in u))return!1}return!0}function tn(n){return n instanceof tn?n:this instanceof tn?void(this._wrapped=n):new tn(n)}function en(n){return new Uint8Array(n.buffer||n,n.byteOffset||0,G(n))}tn.VERSION=n,tn.prototype.value=function(){return this._wrapped},tn.prototype.valueOf=tn.prototype.toJSON=tn.prototype.value,tn.prototype.toString=function(){return String(this._wrapped)};var un="[object DataView]";function on(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var o=typeof n;return("function"===o||"object"===o||"object"==typeof r)&&function n(r,t,e,o){r instanceof tn&&(r=r._wrapped);t instanceof tn&&(t=t._wrapped);var i=a.call(r);if(i!==a.call(t))return!1;if(F&&"[object Object]"==i&&q(r)){if(!q(t))return!1;i=un}switch(i){case"[object RegExp]":case"[object String]":return""+r==""+t;case"[object Number]":return+r!=+r?+t!=+t:0==+r?1/+r==1/t:+r==+t;case"[object Date]":case"[object Boolean]":return+r==+t;case"[object Symbol]":return u.valueOf.call(r)===u.valueOf.call(t);case"[object ArrayBuffer]":case un:return n(en(r),en(t),e,o)}var f="[object Array]"===i;if(!f&&X(r)){if(G(r)!==G(t))return!1;if(r.buffer===t.buffer&&r.byteOffset===t.byteOffset)return!0;f=!0}if(!f){if("object"!=typeof r||"object"!=typeof t)return!1;var c=r.constructor,l=t.constructor;if(c!==l&&!(D(c)&&c instanceof c&&D(l)&&l instanceof l)&&"constructor"in r&&"constructor"in t)return!1}o=o||[];var s=(e=e||[]).length;for(;s--;)if(e[s]===r)return o[s]===t;if(e.push(r),o.push(t),f){if((s=r.length)!==t.length)return!1;for(;s--;)if(!on(r[s],t[s],e,o))return!1}else{var p,v=nn(r);if(s=v.length,nn(t).length!==s)return!1;for(;s--;)if(p=v[s],!W(t,p)||!on(r[p],t[p],e,o))return!1}return e.pop(),o.pop(),!0}(n,r,t,e)}function an(n){if(!_(n))return[];var r=[];for(var t in n)r.push(t);return g&&Z(n,r),r}function fn(n){var r=Y(n);return function(t){if(null==t)return!1;var e=an(t);if(Y(e))return!1;for(var u=0;u<r;u++)if(!D(t[n[u]]))return!1;return n!==hn||!D(t[cn])}}var cn="forEach",ln="has",sn=["clear","delete"],pn=["get",ln,"set"],vn=sn.concat(cn,pn),hn=sn.concat(pn),yn=["add"].concat(sn,cn,ln),dn=V?fn(vn):x("Map"),gn=V?fn(hn):x("WeakMap"),bn=V?fn(yn):x("Set"),mn=x("WeakSet");function jn(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e}function _n(n){for(var r={},t=nn(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r}function wn(n){var r=[];for(var t in n)D(n[t])&&r.push(t);return r.sort()}function An(n,r){return function(t){var e=arguments.length;if(r&&(t=Object(t)),e<2||null==t)return t;for(var u=1;u<e;u++)for(var o=arguments[u],i=n(o),a=i.length,f=0;f<a;f++){var c=i[f];r&&void 0!==t[c]||(t[c]=o[c])}return t}}var xn=An(an),Sn=An(nn),On=An(an,!0);function Mn(n){if(!_(n))return{};if(v)return v(n);var r=function(){};r.prototype=n;var t=new r;return r.prototype=null,t}function En(n){return _(n)?U(n)?n.slice():xn({},n):n}function Bn(n){return U(n)?n:[n]}function Nn(n){return tn.toPath(n)}function In(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0}function Tn(n,r,t){var e=In(n,Nn(r));return w(e)?t:e}function kn(n){return n}function Dn(n){return n=Sn({},n),function(r){return rn(r,n)}}function Rn(n){return n=Nn(n),function(r){return In(r,n)}}function Fn(n,r,t){if(void 0===r)return n;switch(null==t?3:t){case 1:return function(t){return n.call(r,t)};case 3:return function(t,e,u){return n.call(r,t,e,u)};case 4:return function(t,e,u,o){return n.call(r,t,e,u,o)}}return function(){return n.apply(r,arguments)}}function Vn(n,r,t){return null==n?kn:D(n)?Fn(n,r,t):_(n)&&!U(n)?Dn(n):Rn(n)}function Pn(n,r){return Vn(n,r,1/0)}function qn(n,r,t){return tn.iteratee!==Pn?tn.iteratee(n,r):Vn(n,r,t)}function Un(){}function Wn(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))}tn.toPath=Bn,tn.iteratee=Pn;var zn=Date.now||function(){return(new Date).getTime()};function Ln(n){var r=function(r){return n[r]},t="(?:"+nn(n).join("|")+")",e=RegExp(t),u=RegExp(t,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,r):n}}var $n={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},Cn=Ln($n),Kn=Ln(_n($n)),Jn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gn=/(.)^/,Hn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Qn=/\\|'|\r|\n|\u2028|\u2029/g;function Xn(n){return"\\"+Hn[n]}var Yn=/^\s*(\w|\$)+\s*$/;var Zn=0;function nr(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var rr=j((function(n,r){var t=rr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a<o;a++)i[a]=r[a]===t?arguments[u++]:r[a];for(;u<arguments.length;)i.push(arguments[u++]);return nr(n,e,this,this,i)};return e}));rr.placeholder=tn;var tr=j((function(n,r,t){if(!D(n))throw new TypeError("Bind must be called on a function");var e=j((function(u){return nr(n,e,r,this,t.concat(u))}));return e})),er=K(Y);function ur(n,r,t,e){if(e=e||[],r||0===r){if(r<=0)return e.concat(n)}else r=1/0;for(var u=e.length,o=0,i=Y(n);o<i;o++){var a=n[o];if(er(a)&&(U(a)||L(a)))if(r>1)ur(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f<c;)e[u++]=a[f++];else t||(e[u++]=a)}return e}var or=j((function(n,r){var t=(r=ur(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=tr(n[e],n)}return n}));var ir=j((function(n,r,t){return setTimeout((function(){return n.apply(null,t)}),r)})),ar=rr(ir,tn,1);function fr(n){return function(){return!n.apply(this,arguments)}}function cr(n,r){var t;return function(){return--n>0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var lr=rr(cr,2);function sr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o<i;o++)if(r(n[e=u[o]],e,n))return e}function pr(n){return function(r,t,e){t=qn(t,e);for(var u=Y(r),o=n>0?0:u-1;o>=0&&o<u;o+=n)if(t(r[o],o,r))return o;return-1}}var vr=pr(1),hr=pr(-1);function yr(n,r,t,e){for(var u=(t=qn(t,e,1))(r),o=0,i=Y(n);o<i;){var a=Math.floor((o+i)/2);t(n[a])<u?o=a+1:i=a}return o}function dr(n,r,t){return function(e,u,o){var a=0,f=Y(e);if("number"==typeof o)n>0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o<f;o+=n)if(e[o]===u)return o;return-1}}var gr=dr(1,vr,yr),br=dr(-1,hr);function mr(n,r,t){var e=(er(n)?vr:sr)(n,r,t);if(void 0!==e&&-1!==e)return n[e]}function jr(n,r,t){var e,u;if(r=Fn(r,t),er(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var o=nn(n);for(e=0,u=o.length;e<u;e++)r(n[o[e]],o[e],n)}return n}function _r(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=Array(u),i=0;i<u;i++){var a=e?e[i]:i;o[i]=r(n[a],a,n)}return o}function wr(n){var r=function(r,t,e,u){var o=!er(r)&&nn(r),i=(o||r).length,a=n>0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a<i;a+=n){var f=o?o[a]:a;e=t(e,r[f],f,r)}return e};return function(n,t,e,u){var o=arguments.length>=3;return r(n,Fn(t,u,4),e,o)}}var Ar=wr(1),xr=wr(-1);function Sr(n,r,t){var e=[];return r=qn(r,t),jr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Or(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(!r(n[i],i,n))return!1}return!0}function Mr(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(r(n[i],i,n))return!0}return!1}function Er(n,r,t,e){return er(n)||(n=jn(n)),("number"!=typeof t||e)&&(t=0),gr(n,r,t)>=0}var Br=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Nn(r),e=r.slice(0,-1),r=r[r.length-1]),_r(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=In(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Nr(n,r){return _r(n,Rn(r))}function Ir(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e>o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}function Tr(n,r,t){if(null==r||t)return er(n)||(n=jn(n)),n[Wn(n.length-1)];var e=er(n)?En(n):jn(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i<r;i++){var a=Wn(i,o),f=e[i];e[i]=e[a],e[a]=f}return e.slice(0,r)}function kr(n,r){return function(t,e,u){var o=r?[[],[]]:{};return e=qn(e,u),jr(t,(function(r,u){var i=e(r,u,t);n(o,r,i)})),o}}var Dr=kr((function(n,r,t){W(n,t)?n[t].push(r):n[t]=[r]})),Rr=kr((function(n,r,t){n[t]=r})),Fr=kr((function(n,r,t){W(n,t)?n[t]++:n[t]=1})),Vr=kr((function(n,r,t){n[t?0:1].push(r)}),!0),Pr=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function qr(n,r,t){return r in t}var Ur=j((function(n,r){var t={},e=r[0];if(null==n)return t;D(e)?(r.length>1&&(e=Fn(e,r[1])),r=an(n)):(e=qr,r=ur(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u<o;u++){var i=r[u],a=n[i];e(a,i,n)&&(t[i]=a)}return t})),Wr=j((function(n,r){var t,e=r[0];return D(e)?(e=fr(e),r.length>1&&(t=r[1])):(r=_r(ur(r,!1,!1),String),e=function(n,t){return!Er(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=ur(r,!0,!0),Sr(n,(function(n){return!Er(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u=[],o=[],i=0,a=Y(n);i<a;i++){var f=n[i],c=t?t(f,i,n):f;r&&!t?(i&&o===c||u.push(f),o=c):t?Er(o,c)||(o.push(c),u.push(f)):Er(u,f)||u.push(f)}return u}var Gr=j((function(n){return Jr(ur(n,!0,!0))}));function Hr(n){for(var r=n&&Ir(n,Y).length||0,t=Array(r),e=0;e<r;e++)t[e]=Nr(n,e);return t}var Qr=j(Hr);function Xr(n,r){return n._chain?tn(r).chain():r}function Yr(n){return jr(wn(n),(function(r){var t=tn[r]=n[r];tn.prototype[r]=function(){var n=[this._wrapped];return o.apply(n,arguments),Xr(this,t.apply(tn,n))}})),tn}jr(["pop","push","reverse","shift","sort","splice","unshift"],(function(n){var r=t[n];tn.prototype[n]=function(){var t=this._wrapped;return null!=t&&(r.apply(t,arguments),"shift"!==n&&"splice"!==n||0!==t.length||delete t[0]),Xr(this,t)}})),jr(["concat","join","slice"],(function(n){var r=t[n];tn.prototype[n]=function(){var n=this._wrapped;return null!=n&&(n=r.apply(n,arguments)),Xr(this,n)}}));var Zr=Yr({__proto__:null,VERSION:n,restArguments:j,isObject:_,isNull:function(n){return null===n},isUndefined:w,isBoolean:A,isElement:function(n){return!(!n||1!==n.nodeType)},isString:S,isNumber:O,isDate:M,isRegExp:E,isError:B,isSymbol:N,isArrayBuffer:I,isDataView:q,isArray:U,isFunction:D,isArguments:L,isFinite:function(n){return!N(n)&&d(n)&&!isNaN(parseFloat(n))},isNaN:$,isTypedArray:X,isEmpty:function(n){if(null==n)return!0;var r=Y(n);return"number"==typeof r&&(U(n)||S(n)||L(n))?0===r:0===Y(nn(n))},isMatch:rn,isEqual:function(n,r){return on(n,r)},isMap:dn,isWeakMap:gn,isSet:bn,isWeakSet:mn,keys:nn,allKeys:an,values:jn,pairs:function(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},invert:_n,functions:wn,methods:wn,extend:xn,extendOwn:Sn,assign:Sn,defaults:On,create:function(n,r){var t=Mn(n);return r&&Sn(t,r),t},clone:En,tap:function(n,r){return r(n),n},get:Tn,has:function(n,r){for(var t=(r=Nn(r)).length,e=0;e<t;e++){var u=r[e];if(!W(n,u))return!1;n=n[u]}return!!t},mapObject:function(n,r,t){r=qn(r,t);for(var e=nn(n),u=e.length,o={},i=0;i<u;i++){var a=e[i];o[a]=r(n[a],a,n)}return o},identity:kn,constant:C,noop:Un,toPath:Bn,property:Rn,propertyOf:function(n){return null==n?Un:function(r){return Tn(n,r)}},matcher:Dn,matches:Dn,times:function(n,r,t){var e=Array(Math.max(0,n));r=Fn(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},random:Wn,now:zn,escape:Cn,unescape:Kn,templateSettings:Jn,template:function(n,r,t){!r&&t&&(r=t),r=On({},r,tn.templateSettings);var e=RegExp([(r.escape||Gn).source,(r.interpolate||Gn).source,(r.evaluate||Gn).source].join("|")+"|$","g"),u=0,o="__p+='";n.replace(e,(function(r,t,e,i,a){return o+=n.slice(u,a).replace(Qn,Xn),u=a+r.length,t?o+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":e?o+="'+\n((__t=("+e+"))==null?'':__t)+\n'":i&&(o+="';\n"+i+"\n__p+='"),r})),o+="';\n";var i,a=r.variable;if(a){if(!Yn.test(a))throw new Error("variable is not a bare identifier: "+a)}else o="with(obj||{}){\n"+o+"}\n",a="obj";o="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{i=new Function(a,"_",o)}catch(n){throw n.source=o,n}var f=function(n){return i.call(this,n,tn)};return f.source="function("+a+"){\n"+o+"}",f},result:function(n,r,t){var e=(r=Nn(r)).length;if(!e)return D(t)?t.call(n):t;for(var u=0;u<e;u++){var o=null==n?void 0:n[r[u]];void 0===o&&(o=t,u=e),n=D(o)?o.call(n):o}return n},uniqueId:function(n){var r=++Zn+"";return n?n+r:r},chain:function(n){var r=tn(n);return r._chain=!0,r},iteratee:Pn,partial:rr,bind:tr,bindAll:or,memoize:function(n,r){var t=function(e){var u=t.cache,o=""+(r?r.apply(this,arguments):e);return W(u,o)||(u[o]=n.apply(this,arguments)),u[o]};return t.cache={},t},delay:ir,defer:ar,throttle:function(n,r,t){var e,u,o,i,a=0;t||(t={});var f=function(){a=!1===t.leading?0:zn(),e=null,i=n.apply(u,o),e||(u=o=null)},c=function(){var c=zn();a||!1!==t.leading||(a=c);var l=r-(c-a);return u=this,o=arguments,l<=0||l>r?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=zn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=zn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return rr(r,n)},negate:fr,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:cr,once:lr,findKey:sr,findIndex:vr,findLastIndex:hr,sortedIndex:yr,indexOf:gr,lastIndexOf:br,find:mr,detect:mr,findWhere:function(n,r){return mr(n,Dn(r))},each:jr,forEach:jr,map:_r,collect:_r,reduce:Ar,foldl:Ar,inject:Ar,reduceRight:xr,foldr:xr,filter:Sr,select:Sr,reject:function(n,r,t){return Sr(n,fr(qn(r)),t)},every:Or,all:Or,some:Mr,any:Mr,contains:Er,includes:Er,include:Er,invoke:Br,pluck:Nr,where:function(n,r){return Sr(n,Dn(r))},max:Ir,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e<o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))<i||u===1/0&&o===1/0)&&(o=n,i=u)}));return o},shuffle:function(n){return Tr(n,1/0)},sample:Tr,sortBy:function(n,r,t){var e=0;return r=qn(r,t),Nr(_r(n,(function(n,t,u){return{value:n,index:e++,criteria:r(n,t,u)}})).sort((function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(t>e||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index})),"value")},groupBy:Dr,indexBy:Rr,countBy:Fr,partition:Vr,toArray:function(n){return n?U(n)?i.call(n):S(n)?n.match(Pr):er(n)?_r(n,kn):jn(n):[]},size:function(n){return null==n?0:er(n)?n.length:nn(n).length},pick:Ur,omit:Wr,first:Lr,head:Lr,take:Lr,initial:zr,last:function(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[n.length-1]:$r(n,Math.max(0,n.length-r))},rest:$r,tail:$r,drop:$r,compact:function(n){return Sr(n,Boolean)},flatten:function(n,r){return ur(n,r,!1)},without:Kr,uniq:Jr,unique:Jr,union:Gr,intersection:function(n){for(var r=[],t=arguments.length,e=0,u=Y(n);e<u;e++){var o=n[e];if(!Er(r,o)){var i;for(i=1;i<t&&Er(arguments[i],o);i++);i===t&&r.push(o)}}return r},difference:Cr,unzip:Hr,transpose:Hr,zip:Qr,object:function(n,r){for(var t={},e=0,u=Y(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t},range:function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),o=0;o<e;o++,n+=t)u[o]=n;return u},chunk:function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(i.call(n,e,e+=r));return t},mixin:Yr,default:tn});return Zr._=Zr,Zr}));
  • doc/build/html/genindex.html

    rf3421e6 r5547430  
    1 
    2 
    31<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    42  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    53
    6 <html xmlns="http://www.w3.org/1999/xhtml">
     4<html>
    75  <head>
    8     <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    9     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    10     <title>Index &#8212; RadarDex 0.314 documentation</title>
    11     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
    12     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    13     <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
    14     <script type="text/javascript" src="_static/jquery.js"></script>
    15     <script type="text/javascript" src="_static/underscore.js"></script>
    16     <script type="text/javascript" src="_static/doctools.js"></script>
    17     <script type="text/javascript" src="_static/language_data.js"></script>
     6    <meta charset="utf-8" />
     7    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     8    <title>Index &#8212; AmmosReader 0.314 documentation</title>
     9    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     10    <link rel="stylesheet" type="text/css" href="_static/css/adctheme.css" />
     11    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     12    <script src="_static/jquery.js"></script>
     13    <script src="_static/underscore.js"></script>
     14    <script src="_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1816    <link rel="index" title="Index" href="#" />
    1917    <link rel="search" title="Search" href="search.html" />
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="index.html" />
     19    <link media="only screen and (max-device-width: 480px)" href="_static/css/mobile.css" type="text/css" rel="stylesheet" />
     20  </head><body>
     21<div id="docstitle">
     22    <p>AmmosReader 0.314 documentation</p>
     23</div>
     24<div id="header">
     25    <div id="title"><h1>Index</h1></div>
     26    <ul id="headerButtons">
     27        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     28        <li id="page_buttons">
     29            <div class="headerButton"><a href="#" title="General Index" accesskey="I">index</a></div>
     30        </li>
     31    </ul>
     32</div>
     33
     34<div id="sphinxsidebar">
     35  <div class="sphinxsidebarwrapper">
     36        <ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
     37       
     38
    2039   
    21   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
    22  
    23   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
    2440
    25   </head><body>
    26  
     41    <div id="searchbox" style="display: none">
     42        <form class="search" action="search.html" method="get">
     43                        <div class="search-wrapper">
     44                        <input type="submit" value="" class="search-left"/>
     45                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     46                        <span class="search-right">&nbsp;</span>
     47                        </div>
     48          <input type="hidden" name="check_keywords" value="yes" />
     49          <input type="hidden" name="area" value="default" />
     50        </form>
     51    </div>
     52    <script type="text/javascript">$('#searchbox').show(0);</script>
     53  </div>
     54</div>
     55
     56
    2757
    2858    <div class="document">
    2959      <div class="documentwrapper">
    3060        <div class="bodywrapper">
    31           <div class="body" role="main">
     61          <div class="body">
    3262           
    3363
     
    3969
    4070
    41           </div>
     71          </div> 
    4272        </div>
    4373      </div>
    44       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    45         <div class="sphinxsidebarwrapper">
    46 <h1 class="logo"><a href="index.html">RadarDex</a></h1>
    47 
    48 
    49 
    50 
    51 
    52 
    53 
    54 
    55 <h3>Navigation</h3>
    56 
    57 <div class="relations">
    58 <h3>Related Topics</h3>
    59 <ul>
    60   <li><a href="index.html">Documentation overview</a><ul>
    61   </ul></li>
    62 </ul>
    63 </div>
    64 <div id="searchbox" style="display: none" role="search">
    65   <h3>Quick search</h3>
    66     <div class="searchformwrapper">
    67     <form class="search" action="search.html" method="get">
    68       <input type="text" name="q" />
    69       <input type="submit" value="Go" />
    70       <input type="hidden" name="check_keywords" value="yes" />
    71       <input type="hidden" name="area" value="default" />
    72     </form>
     74    <div class="footer">
     75    <p>
     76      &copy; Copyright 2022, KIDZg.
     77      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.4.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     78    (Revision )
     79        </p>
    7380    </div>
    74 </div>
    75 <script type="text/javascript">$('#searchbox').show(0);</script>
    76         </div>
    77       </div>
    7881      <div class="clearer"></div>
    7982    </div>
    80     <div class="footer">
    81       &copy;2020, Enrico Schwass.
    82      
    83       |
    84       Powered by <a href="http://sphinx-doc.org/">Sphinx 1.8.5</a>
    85       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
    86      
    87     </div>
    88 
    89    
    90 
    91    
     83        <div id="breadcrumbs">
     84                Index
     85        </div>
     86        <script type="text/javascript" charset="utf-8" src="_static/js/toc.js"></script>
    9287  </body>
    9388</html>
  • doc/build/html/index.html

    rf3421e6 r5547430  
    1 
    21<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    32  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    43
    5 <html xmlns="http://www.w3.org/1999/xhtml">
     4<html>
    65  <head>
    7     <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    8     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    9     <title>Welcome to RadarDex’s documentation! &#8212; RadarDex 0.314 documentation</title>
    10     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
    11     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    12     <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
    13     <script type="text/javascript" src="_static/jquery.js"></script>
    14     <script type="text/javascript" src="_static/underscore.js"></script>
    15     <script type="text/javascript" src="_static/doctools.js"></script>
    16     <script type="text/javascript" src="_static/language_data.js"></script>
     6    <meta charset="utf-8" />
     7    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
     8
     9    <title>Welcome to RadarDex’s documentation! &#8212; AmmosReader 0.314 documentation</title>
     10    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     11    <link rel="stylesheet" type="text/css" href="_static/css/adctheme.css" />
     12    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     13    <script src="_static/jquery.js"></script>
     14    <script src="_static/underscore.js"></script>
     15    <script src="_static/doctools.js"></script>
     16    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1717    <link rel="index" title="Index" href="genindex.html" />
    1818    <link rel="search" title="Search" href="search.html" />
    19    
    20   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
    21  
    22   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     19    <link rel="top" title="AmmosReader 0.314 documentation" href="#" />
     20    <link media="only screen and (max-device-width: 480px)" href="_static/css/mobile.css" type="text/css" rel="stylesheet" />
     21  </head><body>
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>Welcome to RadarDex’s documentation!</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
     31        </li>
     32    </ul>
     33</div>
    2334
    24   </head><body>
    25  
     35<div id="sphinxsidebar">
     36  <div class="sphinxsidebarwrapper">
     37        <ul><li class="toctree-l1"><a href="#">Main Page</a></li></ul>
     38       
     39      <h3>This Page</h3>
     40      <ul class="this-page-menu">
     41        <li><a href="_sources/index.rst.txt"
     42               rel="nofollow">Show Source</a></li>
     43      </ul>
     44    <div id="searchbox" style="display: none">
     45        <form class="search" action="search.html" method="get">
     46                        <div class="search-wrapper">
     47                        <input type="submit" value="" class="search-left"/>
     48                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     49                        <span class="search-right">&nbsp;</span>
     50                        </div>
     51          <input type="hidden" name="check_keywords" value="yes" />
     52          <input type="hidden" name="area" value="default" />
     53        </form>
     54    </div>
     55    <script type="text/javascript">$('#searchbox').show(0);</script>
     56  </div>
     57</div>
     58
     59
    2660
    2761    <div class="document">
    2862      <div class="documentwrapper">
    2963        <div class="bodywrapper">
    30           <div class="body" role="main">
     64          <div class="body">
    3165           
    32   <div class="section" id="welcome-to-radardex-s-documentation">
     66  <section id="welcome-to-radardex-s-documentation">
    3367<h1>Welcome to RadarDex’s documentation!<a class="headerlink" href="#welcome-to-radardex-s-documentation" title="Permalink to this headline">¶</a></h1>
    3468<div class="toctree-wrapper compound">
    3569</div>
    36 </div>
    37 <div class="section" id="indices-and-tables">
     70</section>
     71<section id="indices-and-tables">
    3872<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1>
    3973<ul class="simple">
    40 <li><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></li>
    41 <li><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></li>
    42 <li><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></li>
     74<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
     75<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
     76<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
    4377</ul>
    44 </div>
     78</section>
    4579
    4680
    47           </div>
     81          </div> 
    4882        </div>
    4983      </div>
    50       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    51         <div class="sphinxsidebarwrapper">
    52 <h1 class="logo"><a href="#">RadarDex</a></h1>
    53 
    54 
    55 
    56 
    57 
    58 
    59 
    60 
    61 <h3>Navigation</h3>
    62 
    63 <div class="relations">
    64 <h3>Related Topics</h3>
    65 <ul>
    66   <li><a href="#">Documentation overview</a><ul>
    67   </ul></li>
    68 </ul>
    69 </div>
    70 <div id="searchbox" style="display: none" role="search">
    71   <h3>Quick search</h3>
    72     <div class="searchformwrapper">
    73     <form class="search" action="search.html" method="get">
    74       <input type="text" name="q" />
    75       <input type="submit" value="Go" />
    76       <input type="hidden" name="check_keywords" value="yes" />
    77       <input type="hidden" name="area" value="default" />
    78     </form>
     84    <div class="footer">
     85    <p>
     86      &copy; Copyright 2022, KIDZg.
     87      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.4.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     88    (Revision )
     89        </p>
    7990    </div>
    80 </div>
    81 <script type="text/javascript">$('#searchbox').show(0);</script>
    82         </div>
    83       </div>
    8491      <div class="clearer"></div>
    8592    </div>
    86     <div class="footer">
    87       &copy;2020, Enrico Schwass.
    88      
    89       |
    90       Powered by <a href="http://sphinx-doc.org/">Sphinx 1.8.5</a>
    91       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
    92      
    93       |
    94       <a href="_sources/index.rst.txt"
    95           rel="nofollow">Page source</a>
    96     </div>
    97 
    98    
    99 
    100    
     93        <div id="breadcrumbs">
     94                Welcome to RadarDex’s documentation!
     95        </div>
     96        <script type="text/javascript" charset="utf-8" src="_static/js/toc.js"></script>
    10197  </body>
    10298</html>
  • doc/build/html/search.html

    rf3421e6 r5547430  
    1 
    21<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    32  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    43
    5 <html xmlns="http://www.w3.org/1999/xhtml">
     4<html>
    65  <head>
    7     <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    8     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    9     <title>Search &#8212; RadarDex 0.314 documentation</title>
    10     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
    11     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     6    <meta charset="utf-8" />
     7    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     8    <title>Search &#8212; AmmosReader 0.314 documentation</title>
     9    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     10    <link rel="stylesheet" type="text/css" href="_static/css/adctheme.css" />
    1211   
    13     <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
    14     <script type="text/javascript" src="_static/jquery.js"></script>
    15     <script type="text/javascript" src="_static/underscore.js"></script>
    16     <script type="text/javascript" src="_static/doctools.js"></script>
    17     <script type="text/javascript" src="_static/language_data.js"></script>
    18     <script type="text/javascript" src="_static/searchtools.js"></script>
     12    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     13    <script src="_static/jquery.js"></script>
     14    <script src="_static/underscore.js"></script>
     15    <script src="_static/doctools.js"></script>
     16    <script src="_static/searchtools.js"></script>
     17    <script src="_static/language_data.js"></script>
     18    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1919    <link rel="index" title="Index" href="genindex.html" />
    2020    <link rel="search" title="Search" href="#" />
    21   <script type="text/javascript">
    22     jQuery(function() { Search.loadIndex("searchindex.js"); });
    23   </script>
    24  
    25   <script type="text/javascript" id="searchindexloader"></script>
    26  
     21    <link rel="top" title="AmmosReader 0.314 documentation" href="index.html" />
     22    <link media="only screen and (max-device-width: 480px)" href="_static/css/mobile.css" type="text/css" rel="stylesheet" />
     23  <script src="searchindex.js" defer></script>
    2724   
    28   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
    29  
    30   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     25
     26  </head><body>
     27<div id="docstitle">
     28    <p>AmmosReader 0.314 documentation</p>
     29</div>
     30<div id="header">
     31    <div id="title"><h1>Search</h1></div>
     32    <ul id="headerButtons">
     33        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     34        <li id="page_buttons">
     35            <div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
     36        </li>
     37    </ul>
     38</div>
     39
     40<div id="sphinxsidebar">
     41  <div class="sphinxsidebarwrapper">
     42        <ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
     43       
     44  </div>
     45</div>
    3146
    3247
    33   </head><body>
    34  
    3548
    3649    <div class="document">
    3750      <div class="documentwrapper">
    3851        <div class="bodywrapper">
    39           <div class="body" role="main">
     52          <div class="body">
    4053           
    4154  <h1 id="search-documentation">Search</h1>
    42   <div id="fallback" class="admonition warning">
    43   <script type="text/javascript">$('#fallback').hide();</script>
     55 
     56  <noscript>
     57  <div class="admonition warning">
    4458  <p>
    4559    Please activate JavaScript to enable the search
     
    4761  </p>
    4862  </div>
     63  </noscript>
     64 
     65 
    4966  <p>
    50     From here you can search these documents. Enter your search
    51     words into the box below and click "search". Note that the search
    52     function will automatically search for all of the words. Pages
    53     containing fewer words won't appear in the result list.
     67    Searching for multiple words only shows matches that contain
     68    all words.
    5469  </p>
     70 
     71 
    5572  <form action="" method="get">
    56     <input type="text" name="q" value="" />
     73    <input type="text" name="q" aria-labelledby="search-documentation" value="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    5774    <input type="submit" value="search" />
    5875    <span id="search-progress" style="padding-left: 10px"></span>
    5976  </form>
    6077 
     78 
     79 
    6180  <div id="search-results">
    6281 
    6382  </div>
     83 
    6484
    65           </div>
     85          </div> 
    6686        </div>
    6787      </div>
    68       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    69         <div class="sphinxsidebarwrapper">
    70 <h1 class="logo"><a href="index.html">RadarDex</a></h1>
    71 
    72 
    73 
    74 
    75 
    76 
    77 
    78 
    79 <h3>Navigation</h3>
    80 
    81 <div class="relations">
    82 <h3>Related Topics</h3>
    83 <ul>
    84   <li><a href="index.html">Documentation overview</a><ul>
    85   </ul></li>
    86 </ul>
    87 </div>
    88         </div>
    89       </div>
     88    <div class="footer">
     89    <p>
     90      &copy; Copyright 2022, KIDZg.
     91      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.4.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     92    (Revision )
     93        </p>
     94    </div>
    9095      <div class="clearer"></div>
    9196    </div>
    92     <div class="footer">
    93       &copy;2020, Enrico Schwass.
    94      
    95       |
    96       Powered by <a href="http://sphinx-doc.org/">Sphinx 1.8.5</a>
    97       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
    98      
    99     </div>
    100 
    101    
    102 
    103    
     97        <div id="breadcrumbs">
     98                Search
     99        </div>
     100        <script type="text/javascript" charset="utf-8" src="_static/js/toc.js"></script>
    104101  </body>
    105102</html>
  • doc/build/html/searchindex.js

    rf3421e6 r5547430  
    1 Search.setIndex({docnames:["index"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.viewcode":1,sphinx:55},filenames:["index.rst"],objects:{},objnames:{},objtypes:{},terms:{index:0,modul:0,page:0,search:0},titles:["Welcome to RadarDex\u2019s documentation!"],titleterms:{document:0,indic:0,radardex:0,tabl:0,welcom:0}})
     1Search.setIndex({docnames:["index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["index.rst"],objects:{},objnames:{},objtypes:{},terms:{index:0,modul:0,page:0,search:0},titles:["Welcome to RadarDex\u2019s documentation!"],titleterms:{document:0,indic:0,radardex:0,s:0,tabl:0,welcom:0}})
  • doc/html/.buildinfo

    rf3421e6 r5547430  
    11# Sphinx build info version 1
    22# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
    3 config: 9183d4fef97c4097ad1bd368cc52b887
     3config: 13374ee1ea55cf36915a4a11d92b21ec
    44tags: 645f666f9bcd5a90fca523b33c5a78b7
  • doc/html/PDW.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    99    <title>PDW module &#8212; AmmosReader 0.314 documentation</title>
    1010    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
    11     <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
     11    <link rel="stylesheet" type="text/css" href="_static/css/adctheme.css" />
    1212    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
    1313    <script src="_static/jquery.js"></script>
    1414    <script src="_static/underscore.js"></script>
    1515    <script src="_static/doctools.js"></script>
     16    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1617    <link rel="index" title="Index" href="genindex.html" />
    1718    <link rel="search" title="Search" href="search.html" />
    18    
    19   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
    20  
    21  
    22   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     19    <link rel="top" title="AmmosReader 0.314 documentation" href="index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="_static/css/mobile.css" type="text/css" rel="stylesheet" />
     21  </head><body>
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>PDW module</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
     31        </li>
     32    </ul>
     33</div>
    2334
    24   </head><body>
    25  
     35<div id="sphinxsidebar">
     36  <div class="sphinxsidebarwrapper">
     37        <ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
     38        <ul>
     39<li class="toctree-l1"><a class="reference internal" href="ammosreader.html">ammosreader package</a></li>
     40</ul>
     41
     42      <h3>This Page</h3>
     43      <ul class="this-page-menu">
     44        <li><a href="_sources/PDW.rst.txt"
     45               rel="nofollow">Show Source</a></li>
     46      </ul>
     47    <div id="searchbox" style="display: none">
     48        <form class="search" action="search.html" method="get">
     49                        <div class="search-wrapper">
     50                        <input type="submit" value="" class="search-left"/>
     51                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     52                        <span class="search-right">&nbsp;</span>
     53                        </div>
     54          <input type="hidden" name="check_keywords" value="yes" />
     55          <input type="hidden" name="area" value="default" />
     56        </form>
     57    </div>
     58    <script type="text/javascript">$('#searchbox').show(0);</script>
     59  </div>
     60</div>
     61
     62
    2663
    2764    <div class="document">
    2865      <div class="documentwrapper">
    2966        <div class="bodywrapper">
    30          
    31 
    32           <div class="body" role="main">
     67          <div class="body">
    3368           
    34   <section id="module-ammosreader.PDW">
    35 <span id="pdw-module"></span><h1>PDW module<a class="headerlink" href="#module-ammosreader.PDW" title="Permalink to this headline">¶</a></h1>
    36 <dl class="py class">
    37 <dt class="sig sig-object py" id="ammosreader.PDW.PDW">
    38 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.PDW.</span></span><span class="sig-name descname"><span class="pre">PDW</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">time_of_arrival</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pdw_format_identifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">center_frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">is_valid</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">is_pulse</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">level_unit</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">signal_start_missing</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">signal_end_missing</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pulse_width</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency_shift_or_bandwidth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pulse_level_or_pulse_field_strength</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">region_of_interest</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">azimuth_confidence</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">modulation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sector</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">polarity</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">df_quality</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">elevation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">azimuth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">channel</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/PDW.html#PDW"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.PDW.PDW" title="Permalink to this definition">¶</a></dt>
    39 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    40 <p>I store information from a single ppdw data block.</p>
    41 <dl class="py method">
    42 <dt class="sig sig-object py" id="ammosreader.PDW.PDW.__init__">
    43 <span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">time_of_arrival</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pdw_format_identifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">center_frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">is_valid</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">is_pulse</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">level_unit</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">signal_start_missing</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">signal_end_missing</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pulse_width</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency_shift_or_bandwidth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pulse_level_or_pulse_field_strength</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">region_of_interest</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">azimuth_confidence</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">modulation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sector</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">polarity</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">df_quality</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">elevation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">azimuth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">channel</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/PDW.html#PDW.__init__"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.PDW.PDW.__init__" title="Permalink to this definition">¶</a></dt>
    44 <dd><dl class="field-list simple">
    45 <dt class="field-odd">Parameters</dt>
    46 <dd class="field-odd"><ul class="simple">
    47 <li><p><strong>time_of_arrival</strong> (<em>Integer</em>) – nanoseconds since 1970-01-01 00:00:00</p></li>
    48 <li><p><strong>pdw_format</strong> (<em>Integer</em>) – format code</p></li>
    49 <li><p><strong>center_frequency</strong> (<em>Integer</em>) – center frequency in KHz</p></li>
    50 <li><p><strong>is_valid</strong> (<em>Boolean</em>) – flag to mark if pdw data body is valid</p></li>
    51 <li><p><strong>is_pulse</strong> (<em>Boolean</em>) – flag to mark if pdw data body contains a pulse or a continuous wave signal</p></li>
    52 <li><p><strong>level_unit</strong> (<em>Integer</em>) – 0 means dBµV - 1 means dBµV/m</p></li>
    53 <li><p><strong>signal_start_missing</strong> (<em>Boolean</em>) – signal started before time of arrival</p></li>
    54 <li><p><strong>signal_end_missing</strong> (<em>Boolean</em>) – signal stops after time of arrival</p></li>
    55 <li><p><strong>pulse_width</strong> (<em>Integer</em>) – pulse width in nanoseconds - Zero if no valid pulse detected</p></li>
    56 <li><p><strong>frequency_shift_or_bandwidth</strong> (<em>Integer</em>) – Value in KHz - Value set to 1048575 means Unknown</p></li>
    57 <li><p><strong>pulse_level_or_pulse_field_strength</strong> (<em>Float</em>) – Pulse level or Pulse Field Strength depending on level_unit          (-200.0…200.0) in 0.1 steps / minus 204.8 means no valid level detected</p></li>
    58 <li><p><strong>region_of_interest</strong> (<em>Boolean</em>) – Marks if signal is from region of interest</p></li>
    59 <li><p><strong>azimuth_confidence</strong> (<em>Float</em>) – degree in steps of 0.1 (0.0-6.2) / 6.3 means confidence unknown</p></li>
    60 <li><p><strong>modulation</strong> (<em>String</em>) – type of modulation (e.g. PSK-2, PSK-4, FM etc.)</p></li>
    61 <li><p><strong>sector</strong> (<em>Integer</em>) – reference antenna sector (0-15)</p></li>
    62 <li><p><strong>polarity</strong> (<em>String</em>) – Horizontal, Vertical, Clockwise, Counter clockwise</p></li>
    63 <li><p><strong>df_quality</strong> (<em>Integer</em>) – Direction finding quality in percent (0-100) - Zero means unknown</p></li>
    64 <li><p><strong>elevation</strong> (<em>Float</em>) – elevation of incoming signal (from -90 to 90 degree) in steps of 0.1 degree         minus 102.4 means unknown</p></li>
    65 <li><p><strong>azimuth</strong> (<em>Float</em>) – azimuth of incoming signal (from 0 to 359.9 degree) in steps of 0.1 degree         plus 409.5 means unknown</p></li>
    66 <li><p><strong>channel</strong> (<em>Integer</em>) – detecting channel (0-16) - Zero means unknown</p></li>
    67 </ul>
    68 </dd>
    69 <dt class="field-even">Returns</dt>
    70 <dd class="field-even"><p>An instance of class PDW with attributes set according to the data of a data body</p>
    71 </dd>
    72 <dt class="field-odd">Return type</dt>
    73 <dd class="field-odd"><p><a class="reference internal" href="ammosreader.html#ammosreader.PDW.PDW" title="ammosreader.PDW.PDW">PDW</a></p>
    74 </dd>
    75 </dl>
    76 </dd></dl>
    77 
    78 <dl class="py method">
    79 <dt class="sig sig-object py" id="ammosreader.PDW.PDW.from_bytes">
    80 <em class="property"><span class="pre">classmethod</span> </em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">byte_string</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/PDW.html#PDW.from_bytes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.PDW.PDW.from_bytes" title="Permalink to this definition">¶</a></dt>
    81 <dd><p>I create an instance of class PDW from data body (8 * 32 bits)</p>
    82 <dl class="field-list simple">
    83 <dt class="field-odd">Parameters</dt>
    84 <dd class="field-odd"><p><strong>byte_string</strong> (<em>byte string</em>) – a byte string containing a single data body read from a ppdw file</p>
    85 </dd>
    86 <dt class="field-even">Returns</dt>
    87 <dd class="field-even"><p>an instance of class PDW with attributes set according to the data of a data body</p>
    88 </dd>
    89 <dt class="field-odd">Return type</dt>
    90 <dd class="field-odd"><p><a class="reference internal" href="ammosreader.html#ammosreader.PDW.PDW" title="ammosreader.PDW.PDW">PDW</a></p>
    91 </dd>
    92 </dl>
    93 </dd></dl>
    94 
    95 </dd></dl>
    96 
     69  <section id="pdw-module">
     70<h1>PDW module<a class="headerlink" href="#pdw-module" title="Permalink to this headline">¶</a></h1>
    9771</section>
    9872
    9973
    100           </div>
    101          
     74          </div>
    10275        </div>
    10376      </div>
    104       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    105         <div class="sphinxsidebarwrapper">
    106 <h1 class="logo"><a href="index.html">AmmosReader</a></h1>
    107 
    108 
    109 
    110 
    111 
    112 
    113 
    114 
    115 <h3>Navigation</h3>
    116 <ul>
    117 <li class="toctree-l1"><a class="reference internal" href="ammosreader.html">ammosreader package</a></li>
    118 </ul>
    119 
    120 <div class="relations">
    121 <h3>Related Topics</h3>
    122 <ul>
    123   <li><a href="index.html">Documentation overview</a><ul>
    124   </ul></li>
    125 </ul>
    126 </div>
    127 <div id="searchbox" style="display: none" role="search">
    128   <h3 id="searchlabel">Quick search</h3>
    129     <div class="searchformwrapper">
    130     <form class="search" action="search.html" method="get">
    131       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    132       <input type="submit" value="Go" />
    133     </form>
     77    <div class="footer">
     78    <p>
     79      &copy; Copyright 2022, KIDZg.
     80      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.4.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     81    (Revision )
     82        </p>
    13483    </div>
    135 </div>
    136 <script>$('#searchbox').show(0);</script>
    137 
    138 
    139 
    140 
    141 
    142 
    143 
    144 
    145         </div>
    146       </div>
    14784      <div class="clearer"></div>
    14885    </div>
    149     <div class="footer">
    150       &copy;2022, Enrico Schwass.
    151      
    152       |
    153       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    154       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    155      
    156       |
    157       <a href="_sources/PDW.rst.txt"
    158           rel="nofollow">Page source</a>
    159     </div>
    160 
    161    
    162 
    163    
     86        <div id="breadcrumbs">
     87                PDW module
     88        </div>
     89        <script type="text/javascript" charset="utf-8" src="_static/js/toc.js"></script>
    16490  </body>
    16591</html>
  • doc/html/_modules/ammosreader/AmmosAudioDataHeader.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.AmmosAudioDataHeader &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
     21  </head><body>
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.AmmosAudioDataHeader</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
    2235
    23   </head><body>
    24  
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.AmmosAudioDataHeader</h1><div class="highlight"><pre>
     
    88120</pre></div>
    89121
    90           </div>
    91          
     122          </div>
    92123        </div>
    93124      </div>
    94       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    95         <div class="sphinxsidebarwrapper">
    96 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    97 
    98 
    99 
    100 
    101 
    102 
    103 
    104 
    105 <h3>Navigation</h3>
    106 <ul>
    107 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    108 </ul>
    109 
    110 <div class="relations">
    111 <h3>Related Topics</h3>
    112 <ul>
    113   <li><a href="../../index.html">Documentation overview</a><ul>
    114   <li><a href="../index.html">Module code</a><ul>
    115   </ul></li>
    116   </ul></li>
    117 </ul>
    118 </div>
    119 <div id="searchbox" style="display: none" role="search">
    120   <h3 id="searchlabel">Quick search</h3>
    121     <div class="searchformwrapper">
    122     <form class="search" action="../../search.html" method="get">
    123       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    124       <input type="submit" value="Go" />
    125     </form>
     125    <div class="footer">
     126    <p>
     127      &copy; Copyright 2022, KIDZg.
     128      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     129    (Revision )
     130        </p>
    126131    </div>
    127 </div>
    128 <script>$('#searchbox').show(0);</script>
    129 
    130 
    131 
    132 
    133 
    134 
    135 
    136 
    137         </div>
    138       </div>
    139132      <div class="clearer"></div>
    140133    </div>
    141     <div class="footer">
    142       &copy;2022, Enrico Schwass.
    143      
    144       |
    145       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    146       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    147      
    148     </div>
    149 
    150    
    151 
    152    
     134        <div id="breadcrumbs">
     135                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     136                ammosreader.AmmosAudioDataHeader
     137        </div>
     138        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    153139  </body>
    154140</html>
  • doc/html/_modules/ammosreader/AmmosAudioReader.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.AmmosAudioReader &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
    22 
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
    2321  </head><body>
    24  
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.AmmosAudioReader</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
     35
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.AmmosAudioReader</h1><div class="highlight"><pre>
     
    3668<span class="kn">import</span> <span class="nn">os</span>
    3769
    38 <span class="kn">from</span> <span class="nn">.AmmosGlobalFrameBody</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameBody</span>
    39 <span class="kn">from</span> <span class="nn">.AmmosAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosAudioDataHeader</span>
    40 <span class="kn">from</span> <span class="nn">.AmmosExtendedAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosExtendedAudioDataHeader</span>
    41 <span class="kn">from</span> <span class="nn">.AmmosGlobalFrameHeader</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameHeader</span>
    42 <span class="kn">from</span> <span class="nn">.AmmosSingleFrame</span> <span class="kn">import</span> <span class="n">AmmosSingleFrame</span>
    43 <span class="kn">from</span> <span class="nn">.AmmosContainer</span> <span class="kn">import</span> <span class="n">AmmosContainer</span>
     70<span class="kn">from</span> <span class="nn">ammosreader.AmmosGlobalFrameBody</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameBody</span>
     71<span class="kn">from</span> <span class="nn">ammosreader.AmmosAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosAudioDataHeader</span>
     72<span class="kn">from</span> <span class="nn">ammosreader.AmmosExtendedAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosExtendedAudioDataHeader</span>
     73<span class="kn">from</span> <span class="nn">ammosreader.AmmosGlobalFrameHeader</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameHeader</span>
     74<span class="kn">from</span> <span class="nn">ammosreader.AmmosSingleFrame</span> <span class="kn">import</span> <span class="n">AmmosSingleFrame</span>
     75<span class="kn">from</span> <span class="nn">ammosreader.AmmosContainer</span> <span class="kn">import</span> <span class="n">AmmosContainer</span>
    4476
    4577
     
    234266</pre></div>
    235267
    236           </div>
    237          
     268          </div>
    238269        </div>
    239270      </div>
    240       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    241         <div class="sphinxsidebarwrapper">
    242 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    243 
    244 
    245 
    246 
    247 
    248 
    249 
    250 
    251 <h3>Navigation</h3>
    252 <ul>
    253 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    254 </ul>
    255 
    256 <div class="relations">
    257 <h3>Related Topics</h3>
    258 <ul>
    259   <li><a href="../../index.html">Documentation overview</a><ul>
    260   <li><a href="../index.html">Module code</a><ul>
    261   </ul></li>
    262   </ul></li>
    263 </ul>
    264 </div>
    265 <div id="searchbox" style="display: none" role="search">
    266   <h3 id="searchlabel">Quick search</h3>
    267     <div class="searchformwrapper">
    268     <form class="search" action="../../search.html" method="get">
    269       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    270       <input type="submit" value="Go" />
    271     </form>
     271    <div class="footer">
     272    <p>
     273      &copy; Copyright 2022, KIDZg.
     274      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     275    (Revision )
     276        </p>
    272277    </div>
    273 </div>
    274 <script>$('#searchbox').show(0);</script>
    275 
    276 
    277 
    278 
    279 
    280 
    281 
    282 
    283         </div>
    284       </div>
    285278      <div class="clearer"></div>
    286279    </div>
    287     <div class="footer">
    288       &copy;2022, Enrico Schwass.
    289      
    290       |
    291       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    292       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    293      
    294     </div>
    295 
    296    
    297 
    298    
     280        <div id="breadcrumbs">
     281                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     282                ammosreader.AmmosAudioReader
     283        </div>
     284        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    299285  </body>
    300286</html>
  • doc/html/_modules/ammosreader/AmmosAudioSocketReader.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.AmmosAudioSocketReader &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
    22 
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
    2321  </head><body>
    24  
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.AmmosAudioSocketReader</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
     35
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.AmmosAudioSocketReader</h1><div class="highlight"><pre>
     
    3668
    3769<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
    38 <span class="kn">from</span> <span class="nn">.AmmosAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosAudioDataHeader</span>
    39 <span class="kn">from</span> <span class="nn">.AmmosExtendedAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosExtendedAudioDataHeader</span>
    40 <span class="kn">from</span> <span class="nn">.AmmosGlobalFrameHeader</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameHeader</span>
     70<span class="kn">from</span> <span class="nn">ammosreader.AmmosAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosAudioDataHeader</span>
     71<span class="kn">from</span> <span class="nn">ammosreader.AmmosExtendedAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosExtendedAudioDataHeader</span>
     72<span class="kn">from</span> <span class="nn">ammosreader.AmmosGlobalFrameHeader</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameHeader</span>
    4173
    4274
     
    157189</pre></div>
    158190
    159           </div>
    160          
     191          </div>
    161192        </div>
    162193      </div>
    163       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    164         <div class="sphinxsidebarwrapper">
    165 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    166 
    167 
    168 
    169 
    170 
    171 
    172 
    173 
    174 <h3>Navigation</h3>
    175 <ul>
    176 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    177 </ul>
    178 
    179 <div class="relations">
    180 <h3>Related Topics</h3>
    181 <ul>
    182   <li><a href="../../index.html">Documentation overview</a><ul>
    183   <li><a href="../index.html">Module code</a><ul>
    184   </ul></li>
    185   </ul></li>
    186 </ul>
    187 </div>
    188 <div id="searchbox" style="display: none" role="search">
    189   <h3 id="searchlabel">Quick search</h3>
    190     <div class="searchformwrapper">
    191     <form class="search" action="../../search.html" method="get">
    192       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    193       <input type="submit" value="Go" />
    194     </form>
     194    <div class="footer">
     195    <p>
     196      &copy; Copyright 2022, KIDZg.
     197      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     198    (Revision )
     199        </p>
    195200    </div>
    196 </div>
    197 <script>$('#searchbox').show(0);</script>
    198 
    199 
    200 
    201 
    202 
    203 
    204 
    205 
    206         </div>
    207       </div>
    208201      <div class="clearer"></div>
    209202    </div>
    210     <div class="footer">
    211       &copy;2022, Enrico Schwass.
    212      
    213       |
    214       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    215       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    216      
    217     </div>
    218 
    219    
    220 
    221    
     203        <div id="breadcrumbs">
     204                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     205                ammosreader.AmmosAudioSocketReader
     206        </div>
     207        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    222208  </body>
    223209</html>
  • doc/html/_modules/ammosreader/AmmosContainer.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.AmmosContainer &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
     21  </head><body>
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.AmmosContainer</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
    2235
    23   </head><body>
    24  
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.AmmosContainer</h1><div class="highlight"><pre>
     
    6395</pre></div>
    6496
    65           </div>
    66          
     97          </div>
    6798        </div>
    6899      </div>
    69       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    70         <div class="sphinxsidebarwrapper">
    71 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    72 
    73 
    74 
    75 
    76 
    77 
    78 
    79 
    80 <h3>Navigation</h3>
    81 <ul>
    82 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    83 </ul>
    84 
    85 <div class="relations">
    86 <h3>Related Topics</h3>
    87 <ul>
    88   <li><a href="../../index.html">Documentation overview</a><ul>
    89   <li><a href="../index.html">Module code</a><ul>
    90   </ul></li>
    91   </ul></li>
    92 </ul>
    93 </div>
    94 <div id="searchbox" style="display: none" role="search">
    95   <h3 id="searchlabel">Quick search</h3>
    96     <div class="searchformwrapper">
    97     <form class="search" action="../../search.html" method="get">
    98       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    99       <input type="submit" value="Go" />
    100     </form>
     100    <div class="footer">
     101    <p>
     102      &copy; Copyright 2022, KIDZg.
     103      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     104    (Revision )
     105        </p>
    101106    </div>
    102 </div>
    103 <script>$('#searchbox').show(0);</script>
    104 
    105 
    106 
    107 
    108 
    109 
    110 
    111 
    112         </div>
    113       </div>
    114107      <div class="clearer"></div>
    115108    </div>
    116     <div class="footer">
    117       &copy;2022, Enrico Schwass.
    118      
    119       |
    120       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    121       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    122      
    123     </div>
    124 
    125    
    126 
    127    
     109        <div id="breadcrumbs">
     110                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     111                ammosreader.AmmosContainer
     112        </div>
     113        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    128114  </body>
    129115</html>
  • doc/html/_modules/ammosreader/AmmosExtendedAudioDataHeader.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.AmmosExtendedAudioDataHeader &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
     21  </head><body>
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.AmmosExtendedAudioDataHeader</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
    2235
    23   </head><body>
    24  
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.AmmosExtendedAudioDataHeader</h1><div class="highlight"><pre>
    3466<span></span><span class="kn">import</span> <span class="nn">struct</span>
    3567<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
    36 <span class="kn">from</span> <span class="nn">.AmmosAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosAudioDataHeader</span>
     68<span class="kn">from</span> <span class="nn">ammosreader.AmmosAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosAudioDataHeader</span>
    3769
    3870
     
    68100</pre></div>
    69101
    70           </div>
    71          
     102          </div>
    72103        </div>
    73104      </div>
    74       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    75         <div class="sphinxsidebarwrapper">
    76 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    77 
    78 
    79 
    80 
    81 
    82 
    83 
    84 
    85 <h3>Navigation</h3>
    86 <ul>
    87 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    88 </ul>
    89 
    90 <div class="relations">
    91 <h3>Related Topics</h3>
    92 <ul>
    93   <li><a href="../../index.html">Documentation overview</a><ul>
    94   <li><a href="../index.html">Module code</a><ul>
    95   </ul></li>
    96   </ul></li>
    97 </ul>
    98 </div>
    99 <div id="searchbox" style="display: none" role="search">
    100   <h3 id="searchlabel">Quick search</h3>
    101     <div class="searchformwrapper">
    102     <form class="search" action="../../search.html" method="get">
    103       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    104       <input type="submit" value="Go" />
    105     </form>
     105    <div class="footer">
     106    <p>
     107      &copy; Copyright 2022, KIDZg.
     108      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     109    (Revision )
     110        </p>
    106111    </div>
    107 </div>
    108 <script>$('#searchbox').show(0);</script>
    109 
    110 
    111 
    112 
    113 
    114 
    115 
    116 
    117         </div>
    118       </div>
    119112      <div class="clearer"></div>
    120113    </div>
    121     <div class="footer">
    122       &copy;2022, Enrico Schwass.
    123      
    124       |
    125       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    126       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    127      
    128     </div>
    129 
    130    
    131 
    132    
     114        <div id="breadcrumbs">
     115                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     116                ammosreader.AmmosExtendedAudioDataHeader
     117        </div>
     118        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    133119  </body>
    134120</html>
  • doc/html/_modules/ammosreader/AmmosExtendedIFDataHeader.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.AmmosExtendedIFDataHeader &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
     21  </head><body>
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.AmmosExtendedIFDataHeader</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
    2235
    23   </head><body>
    24  
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.AmmosExtendedIFDataHeader</h1><div class="highlight"><pre>
    3466<span></span><span class="kn">import</span> <span class="nn">struct</span>
    3567<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
    36 <span class="kn">from</span> <span class="nn">.AmmosIFDataHeader</span> <span class="kn">import</span> <span class="n">AmmosIFDataHeader</span>
     68<span class="kn">from</span> <span class="nn">ammosreader.AmmosIFDataHeader</span> <span class="kn">import</span> <span class="n">AmmosIFDataHeader</span>
    3769
    3870
     
    103135</pre></div>
    104136
    105           </div>
    106          
     137          </div>
    107138        </div>
    108139      </div>
    109       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    110         <div class="sphinxsidebarwrapper">
    111 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    112 
    113 
    114 
    115 
    116 
    117 
    118 
    119 
    120 <h3>Navigation</h3>
    121 <ul>
    122 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    123 </ul>
    124 
    125 <div class="relations">
    126 <h3>Related Topics</h3>
    127 <ul>
    128   <li><a href="../../index.html">Documentation overview</a><ul>
    129   <li><a href="../index.html">Module code</a><ul>
    130   </ul></li>
    131   </ul></li>
    132 </ul>
    133 </div>
    134 <div id="searchbox" style="display: none" role="search">
    135   <h3 id="searchlabel">Quick search</h3>
    136     <div class="searchformwrapper">
    137     <form class="search" action="../../search.html" method="get">
    138       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    139       <input type="submit" value="Go" />
    140     </form>
     140    <div class="footer">
     141    <p>
     142      &copy; Copyright 2022, KIDZg.
     143      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     144    (Revision )
     145        </p>
    141146    </div>
    142 </div>
    143 <script>$('#searchbox').show(0);</script>
    144 
    145 
    146 
    147 
    148 
    149 
    150 
    151 
    152         </div>
    153       </div>
    154147      <div class="clearer"></div>
    155148    </div>
    156     <div class="footer">
    157       &copy;2022, Enrico Schwass.
    158      
    159       |
    160       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    161       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    162      
    163     </div>
    164 
    165    
    166 
    167    
     149        <div id="breadcrumbs">
     150                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     151                ammosreader.AmmosExtendedIFDataHeader
     152        </div>
     153        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    168154  </body>
    169155</html>
  • doc/html/_modules/ammosreader/AmmosGlobalFrameBody.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.AmmosGlobalFrameBody &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
     21  </head><body>
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.AmmosGlobalFrameBody</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
    2235
    23   </head><body>
    24  
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.AmmosGlobalFrameBody</h1><div class="highlight"><pre>
     
    5183</pre></div>
    5284
    53           </div>
    54          
     85          </div>
    5586        </div>
    5687      </div>
    57       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    58         <div class="sphinxsidebarwrapper">
    59 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    60 
    61 
    62 
    63 
    64 
    65 
    66 
    67 
    68 <h3>Navigation</h3>
    69 <ul>
    70 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    71 </ul>
    72 
    73 <div class="relations">
    74 <h3>Related Topics</h3>
    75 <ul>
    76   <li><a href="../../index.html">Documentation overview</a><ul>
    77   <li><a href="../index.html">Module code</a><ul>
    78   </ul></li>
    79   </ul></li>
    80 </ul>
    81 </div>
    82 <div id="searchbox" style="display: none" role="search">
    83   <h3 id="searchlabel">Quick search</h3>
    84     <div class="searchformwrapper">
    85     <form class="search" action="../../search.html" method="get">
    86       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    87       <input type="submit" value="Go" />
    88     </form>
     88    <div class="footer">
     89    <p>
     90      &copy; Copyright 2022, KIDZg.
     91      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     92    (Revision )
     93        </p>
    8994    </div>
    90 </div>
    91 <script>$('#searchbox').show(0);</script>
    92 
    93 
    94 
    95 
    96 
    97 
    98 
    99 
    100         </div>
    101       </div>
    10295      <div class="clearer"></div>
    10396    </div>
    104     <div class="footer">
    105       &copy;2022, Enrico Schwass.
    106      
    107       |
    108       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    109       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    110      
    111     </div>
    112 
    113    
    114 
    115    
     97        <div id="breadcrumbs">
     98                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     99                ammosreader.AmmosGlobalFrameBody
     100        </div>
     101        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    116102  </body>
    117103</html>
  • doc/html/_modules/ammosreader/AmmosGlobalFrameHeader.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.AmmosGlobalFrameHeader &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
     21  </head><body>
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.AmmosGlobalFrameHeader</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
    2235
    23   </head><body>
    24  
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.AmmosGlobalFrameHeader</h1><div class="highlight"><pre>
     
    87119</pre></div>
    88120
    89           </div>
    90          
     121          </div>
    91122        </div>
    92123      </div>
    93       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    94         <div class="sphinxsidebarwrapper">
    95 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    96 
    97 
    98 
    99 
    100 
    101 
    102 
    103 
    104 <h3>Navigation</h3>
    105 <ul>
    106 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    107 </ul>
    108 
    109 <div class="relations">
    110 <h3>Related Topics</h3>
    111 <ul>
    112   <li><a href="../../index.html">Documentation overview</a><ul>
    113   <li><a href="../index.html">Module code</a><ul>
    114   </ul></li>
    115   </ul></li>
    116 </ul>
    117 </div>
    118 <div id="searchbox" style="display: none" role="search">
    119   <h3 id="searchlabel">Quick search</h3>
    120     <div class="searchformwrapper">
    121     <form class="search" action="../../search.html" method="get">
    122       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    123       <input type="submit" value="Go" />
    124     </form>
     124    <div class="footer">
     125    <p>
     126      &copy; Copyright 2022, KIDZg.
     127      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     128    (Revision )
     129        </p>
    125130    </div>
    126 </div>
    127 <script>$('#searchbox').show(0);</script>
    128 
    129 
    130 
    131 
    132 
    133 
    134 
    135 
    136         </div>
    137       </div>
    138131      <div class="clearer"></div>
    139132    </div>
    140     <div class="footer">
    141       &copy;2022, Enrico Schwass.
    142      
    143       |
    144       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    145       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    146      
    147     </div>
    148 
    149    
    150 
    151    
     133        <div id="breadcrumbs">
     134                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     135                ammosreader.AmmosGlobalFrameHeader
     136        </div>
     137        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    152138  </body>
    153139</html>
  • doc/html/_modules/ammosreader/AmmosIFDataBlock.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.AmmosIFDataBlock &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
     21  </head><body>
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.AmmosIFDataBlock</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
    2235
    23   </head><body>
    24  
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.AmmosIFDataBlock</h1><div class="highlight"><pre>
     
    3971</pre></div>
    4072
    41           </div>
    42          
     73          </div>
    4374        </div>
    4475      </div>
    45       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    46         <div class="sphinxsidebarwrapper">
    47 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    48 
    49 
    50 
    51 
    52 
    53 
    54 
    55 
    56 <h3>Navigation</h3>
    57 <ul>
    58 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    59 </ul>
    60 
    61 <div class="relations">
    62 <h3>Related Topics</h3>
    63 <ul>
    64   <li><a href="../../index.html">Documentation overview</a><ul>
    65   <li><a href="../index.html">Module code</a><ul>
    66   </ul></li>
    67   </ul></li>
    68 </ul>
    69 </div>
    70 <div id="searchbox" style="display: none" role="search">
    71   <h3 id="searchlabel">Quick search</h3>
    72     <div class="searchformwrapper">
    73     <form class="search" action="../../search.html" method="get">
    74       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    75       <input type="submit" value="Go" />
    76     </form>
     76    <div class="footer">
     77    <p>
     78      &copy; Copyright 2022, KIDZg.
     79      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     80    (Revision )
     81        </p>
    7782    </div>
    78 </div>
    79 <script>$('#searchbox').show(0);</script>
    80 
    81 
    82 
    83 
    84 
    85 
    86 
    87 
    88         </div>
    89       </div>
    9083      <div class="clearer"></div>
    9184    </div>
    92     <div class="footer">
    93       &copy;2022, Enrico Schwass.
    94      
    95       |
    96       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    97       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    98      
    99     </div>
    100 
    101    
    102 
    103    
     85        <div id="breadcrumbs">
     86                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     87                ammosreader.AmmosIFDataBlock
     88        </div>
     89        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    10490  </body>
    10591</html>
  • doc/html/_modules/ammosreader/AmmosIFDataHeader.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.AmmosIFDataHeader &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
     21  </head><body>
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.AmmosIFDataHeader</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
    2235
    23   </head><body>
    24  
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.AmmosIFDataHeader</h1><div class="highlight"><pre>
     
    88120</pre></div>
    89121
    90           </div>
    91          
     122          </div>
    92123        </div>
    93124      </div>
    94       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    95         <div class="sphinxsidebarwrapper">
    96 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    97 
    98 
    99 
    100 
    101 
    102 
    103 
    104 
    105 <h3>Navigation</h3>
    106 <ul>
    107 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    108 </ul>
    109 
    110 <div class="relations">
    111 <h3>Related Topics</h3>
    112 <ul>
    113   <li><a href="../../index.html">Documentation overview</a><ul>
    114   <li><a href="../index.html">Module code</a><ul>
    115   </ul></li>
    116   </ul></li>
    117 </ul>
    118 </div>
    119 <div id="searchbox" style="display: none" role="search">
    120   <h3 id="searchlabel">Quick search</h3>
    121     <div class="searchformwrapper">
    122     <form class="search" action="../../search.html" method="get">
    123       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    124       <input type="submit" value="Go" />
    125     </form>
     125    <div class="footer">
     126    <p>
     127      &copy; Copyright 2022, KIDZg.
     128      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     129    (Revision )
     130        </p>
    126131    </div>
    127 </div>
    128 <script>$('#searchbox').show(0);</script>
    129 
    130 
    131 
    132 
    133 
    134 
    135 
    136 
    137         </div>
    138       </div>
    139132      <div class="clearer"></div>
    140133    </div>
    141     <div class="footer">
    142       &copy;2022, Enrico Schwass.
    143      
    144       |
    145       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    146       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    147      
    148     </div>
    149 
    150    
    151 
    152    
     134        <div id="breadcrumbs">
     135                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     136                ammosreader.AmmosIFDataHeader
     137        </div>
     138        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    153139  </body>
    154140</html>
  • doc/html/_modules/ammosreader/AmmosIFReader.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.AmmosIFReader &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
    22 
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
    2321  </head><body>
    24  
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.AmmosIFReader</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
     35
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.AmmosIFReader</h1><div class="highlight"><pre>
     
    3567<span class="kn">import</span> <span class="nn">os</span>
    3668
    37 <span class="kn">from</span> <span class="nn">.AmmosGlobalFrameBody</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameBody</span>
    38 <span class="kn">from</span> <span class="nn">.AmmosIFDataHeader</span> <span class="kn">import</span> <span class="n">AmmosIFDataHeader</span>
    39 <span class="kn">from</span> <span class="nn">.AmmosExtendedIFDataHeader</span> <span class="kn">import</span> <span class="n">AmmosExtendedIFDataHeader</span>
    40 <span class="kn">from</span> <span class="nn">.AmmosGlobalFrameHeader</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameHeader</span>
    41 <span class="kn">from</span> <span class="nn">.AmmosSingleFrame</span> <span class="kn">import</span> <span class="n">AmmosSingleFrame</span>
    42 <span class="kn">from</span> <span class="nn">.AmmosIFDataBlock</span> <span class="kn">import</span> <span class="n">AmmosIFDataBlock</span>
    43 <span class="kn">from</span> <span class="nn">.AmmosContainer</span> <span class="kn">import</span> <span class="n">AmmosContainer</span>
     69<span class="kn">from</span> <span class="nn">ammosreader.AmmosGlobalFrameBody</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameBody</span>
     70<span class="kn">from</span> <span class="nn">ammosreader.AmmosIFDataHeader</span> <span class="kn">import</span> <span class="n">AmmosIFDataHeader</span>
     71<span class="kn">from</span> <span class="nn">ammosreader.AmmosExtendedIFDataHeader</span> <span class="kn">import</span> <span class="n">AmmosExtendedIFDataHeader</span>
     72<span class="kn">from</span> <span class="nn">ammosreader.AmmosGlobalFrameHeader</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameHeader</span>
     73<span class="kn">from</span> <span class="nn">ammosreader.AmmosSingleFrame</span> <span class="kn">import</span> <span class="n">AmmosSingleFrame</span>
     74<span class="kn">from</span> <span class="nn">ammosreader.AmmosIFDataBlock</span> <span class="kn">import</span> <span class="n">AmmosIFDataBlock</span>
     75<span class="kn">from</span> <span class="nn">ammosreader.AmmosContainer</span> <span class="kn">import</span> <span class="n">AmmosContainer</span>
    4476
    4577
     
    185217</pre></div>
    186218
    187           </div>
    188          
     219          </div>
    189220        </div>
    190221      </div>
    191       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    192         <div class="sphinxsidebarwrapper">
    193 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    194 
    195 
    196 
    197 
    198 
    199 
    200 
    201 
    202 <h3>Navigation</h3>
    203 <ul>
    204 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    205 </ul>
    206 
    207 <div class="relations">
    208 <h3>Related Topics</h3>
    209 <ul>
    210   <li><a href="../../index.html">Documentation overview</a><ul>
    211   <li><a href="../index.html">Module code</a><ul>
    212   </ul></li>
    213   </ul></li>
    214 </ul>
    215 </div>
    216 <div id="searchbox" style="display: none" role="search">
    217   <h3 id="searchlabel">Quick search</h3>
    218     <div class="searchformwrapper">
    219     <form class="search" action="../../search.html" method="get">
    220       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    221       <input type="submit" value="Go" />
    222     </form>
     222    <div class="footer">
     223    <p>
     224      &copy; Copyright 2022, KIDZg.
     225      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     226    (Revision )
     227        </p>
    223228    </div>
    224 </div>
    225 <script>$('#searchbox').show(0);</script>
    226 
    227 
    228 
    229 
    230 
    231 
    232 
    233 
    234         </div>
    235       </div>
    236229      <div class="clearer"></div>
    237230    </div>
    238     <div class="footer">
    239       &copy;2022, Enrico Schwass.
    240      
    241       |
    242       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    243       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    244      
    245     </div>
    246 
    247    
    248 
    249    
     231        <div id="breadcrumbs">
     232                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     233                ammosreader.AmmosIFReader
     234        </div>
     235        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    250236  </body>
    251237</html>
  • doc/html/_modules/ammosreader/AmmosSingleFrame.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.AmmosSingleFrame &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
     21  </head><body>
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.AmmosSingleFrame</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
    2235
    23   </head><body>
    24  
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.AmmosSingleFrame</h1><div class="highlight"><pre>
     
    5991</pre></div>
    6092
    61           </div>
    62          
     93          </div>
    6394        </div>
    6495      </div>
    65       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    66         <div class="sphinxsidebarwrapper">
    67 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    68 
    69 
    70 
    71 
    72 
    73 
    74 
    75 
    76 <h3>Navigation</h3>
    77 <ul>
    78 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    79 </ul>
    80 
    81 <div class="relations">
    82 <h3>Related Topics</h3>
    83 <ul>
    84   <li><a href="../../index.html">Documentation overview</a><ul>
    85   <li><a href="../index.html">Module code</a><ul>
    86   </ul></li>
    87   </ul></li>
    88 </ul>
    89 </div>
    90 <div id="searchbox" style="display: none" role="search">
    91   <h3 id="searchlabel">Quick search</h3>
    92     <div class="searchformwrapper">
    93     <form class="search" action="../../search.html" method="get">
    94       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    95       <input type="submit" value="Go" />
    96     </form>
     96    <div class="footer">
     97    <p>
     98      &copy; Copyright 2022, KIDZg.
     99      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     100    (Revision )
     101        </p>
    97102    </div>
    98 </div>
    99 <script>$('#searchbox').show(0);</script>
    100 
    101 
    102 
    103 
    104 
    105 
    106 
    107 
    108         </div>
    109       </div>
    110103      <div class="clearer"></div>
    111104    </div>
    112     <div class="footer">
    113       &copy;2022, Enrico Schwass.
    114      
    115       |
    116       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    117       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    118      
    119     </div>
    120 
    121    
    122 
    123    
     105        <div id="breadcrumbs">
     106                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     107                ammosreader.AmmosSingleFrame
     108        </div>
     109        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    124110  </body>
    125111</html>
  • doc/html/_modules/ammosreader/PDW.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.PDW &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
    22 
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
    2321  </head><body>
    24  
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.PDW</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
     35
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.PDW</h1><div class="highlight"><pre>
     
    262294</pre></div>
    263295
    264           </div>
    265          
     296          </div>
    266297        </div>
    267298      </div>
    268       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    269         <div class="sphinxsidebarwrapper">
    270 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    271 
    272 
    273 
    274 
    275 
    276 
    277 
    278 
    279 <h3>Navigation</h3>
    280 <ul>
    281 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    282 </ul>
    283 
    284 <div class="relations">
    285 <h3>Related Topics</h3>
    286 <ul>
    287   <li><a href="../../index.html">Documentation overview</a><ul>
    288   <li><a href="../index.html">Module code</a><ul>
    289   </ul></li>
    290   </ul></li>
    291 </ul>
    292 </div>
    293 <div id="searchbox" style="display: none" role="search">
    294   <h3 id="searchlabel">Quick search</h3>
    295     <div class="searchformwrapper">
    296     <form class="search" action="../../search.html" method="get">
    297       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    298       <input type="submit" value="Go" />
    299     </form>
     299    <div class="footer">
     300    <p>
     301      &copy; Copyright 2022, KIDZg.
     302      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     303    (Revision )
     304        </p>
    300305    </div>
    301 </div>
    302 <script>$('#searchbox').show(0);</script>
    303 
    304 
    305 
    306 
    307 
    308 
    309 
    310 
    311         </div>
    312       </div>
    313306      <div class="clearer"></div>
    314307    </div>
    315     <div class="footer">
    316       &copy;2022, Enrico Schwass.
    317      
    318       |
    319       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    320       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    321      
    322     </div>
    323 
    324    
    325 
    326    
     308        <div id="breadcrumbs">
     309                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     310                ammosreader.PDW
     311        </div>
     312        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    327313  </body>
    328314</html>
  • doc/html/_modules/ammosreader/PPDWContainer.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>ammosreader.PPDWContainer &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../../_static/css/adctheme.css" />
    1111    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
    1212    <script src="../../_static/jquery.js"></script>
    1313    <script src="../../_static/underscore.js"></script>
    1414    <script src="../../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../../genindex.html" />
    1617    <link rel="search" title="Search" href="../../search.html" />
    17    
    18   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../../index.html" />
     19    <link rel="up" title="Module code" href="../index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="../../_static/css/mobile.css" type="text/css" rel="stylesheet" />
     21  </head><body>
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader.PPDWContainer</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="../../genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="../../py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
    2235
    23   </head><body>
    24  
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="../../index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43    <div id="searchbox" style="display: none">
     44        <form class="search" action="../../search.html" method="get">
     45                        <div class="search-wrapper">
     46                        <input type="submit" value="" class="search-left"/>
     47                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     48                        <span class="search-right">&nbsp;</span>
     49                        </div>
     50          <input type="hidden" name="check_keywords" value="yes" />
     51          <input type="hidden" name="area" value="default" />
     52        </form>
     53    </div>
     54    <script type="text/javascript">$('#searchbox').show(0);</script>
     55  </div>
     56</div>
     57
     58
    2559
    2660    <div class="document">
    2761      <div class="documentwrapper">
    2862        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     63          <div class="body">
    3264           
    3365  <h1>Source code for ammosreader.PPDWContainer</h1><div class="highlight"><pre>
     
    5183</pre></div>
    5284
    53           </div>
    54          
     85          </div>
    5586        </div>
    5687      </div>
    57       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    58         <div class="sphinxsidebarwrapper">
    59 <h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
    60 
    61 
    62 
    63 
    64 
    65 
    66 
    67 
    68 <h3>Navigation</h3>
    69 <ul>
    70 <li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
    71 </ul>
    72 
    73 <div class="relations">
    74 <h3>Related Topics</h3>
    75 <ul>
    76   <li><a href="../../index.html">Documentation overview</a><ul>
    77   <li><a href="../index.html">Module code</a><ul>
    78   </ul></li>
    79   </ul></li>
    80 </ul>
    81 </div>
    82 <div id="searchbox" style="display: none" role="search">
    83   <h3 id="searchlabel">Quick search</h3>
    84     <div class="searchformwrapper">
    85     <form class="search" action="../../search.html" method="get">
    86       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    87       <input type="submit" value="Go" />
    88     </form>
     88    <div class="footer">
     89    <p>
     90      &copy; Copyright 2022, KIDZg.
     91      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.5.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     92    (Revision )
     93        </p>
    8994    </div>
    90 </div>
    91 <script>$('#searchbox').show(0);</script>
    92 
    93 
    94 
    95 
    96 
    97 
    98 
    99 
    100         </div>
    101       </div>
    10295      <div class="clearer"></div>
    10396    </div>
    104     <div class="footer">
    105       &copy;2022, Enrico Schwass.
    106      
    107       |
    108       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    109       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    110      
    111     </div>
    112 
    113    
    114 
    115    
     97        <div id="breadcrumbs">
     98                <a href="../index.html" accesskey="U">Module code</a><img src="../../_static/img/triangle_closed.png" height="9" width="9" alt="&gt;">
     99                ammosreader.PPDWContainer
     100        </div>
     101        <script type="text/javascript" charset="utf-8" src="../../_static/js/toc.js"></script>
    116102  </body>
    117103</html>
  • doc/html/_modules/index.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>Overview: module code &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="../_static/css/adctheme.css" />
    1111    <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
    1212    <script src="../_static/jquery.js"></script>
    1313    <script src="../_static/underscore.js"></script>
    1414    <script src="../_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="../genindex.html" />
    1617    <link rel="search" title="Search" href="../search.html" />
    17    
    18   <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="../index.html" />
     19    <link media="only screen and (max-device-width: 480px)" href="../_static/css/mobile.css" type="text/css" rel="stylesheet" />
     20  </head><body>
     21<div id="docstitle">
     22    <p>AmmosReader 0.314 documentation</p>
     23</div>
     24<div id="header">
     25    <div id="title"><h1>Overview: module code</h1></div>
     26    <ul id="headerButtons">
     27        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     28        <li id="page_buttons">
     29            <div class="headerButton"><a href="../genindex.html" title="General Index" accesskey="I">index</a></div>
     30            <div class="headerButton"><a href="../py-modindex.html" title="Python Module Index" >modules</a></div>
     31        </li>
     32    </ul>
     33</div>
    2234
    23   </head><body>
    24  
     35<div id="sphinxsidebar">
     36  <div class="sphinxsidebarwrapper">
     37        <ul><li class="toctree-l1"><a href="../index.html">Main Page</a></li></ul>
     38        <ul>
     39<li class="toctree-l1"><a class="reference internal" href="../ammosreader.html">ammosreader package</a></li>
     40</ul>
     41
     42    <div id="searchbox" style="display: none">
     43        <form class="search" action="../search.html" method="get">
     44                        <div class="search-wrapper">
     45                        <input type="submit" value="" class="search-left"/>
     46                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     47                        <span class="search-right">&nbsp;</span>
     48                        </div>
     49          <input type="hidden" name="check_keywords" value="yes" />
     50          <input type="hidden" name="area" value="default" />
     51        </form>
     52    </div>
     53    <script type="text/javascript">$('#searchbox').show(0);</script>
     54  </div>
     55</div>
     56
     57
    2558
    2659    <div class="document">
    2760      <div class="documentwrapper">
    2861        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     62          <div class="body">
    3263           
    3364  <h1>All modules for which code is available</h1>
     
    4879</ul>
    4980
    50           </div>
    51          
     81          </div>
    5282        </div>
    5383      </div>
    54       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    55         <div class="sphinxsidebarwrapper">
    56 <h1 class="logo"><a href="../index.html">AmmosReader</a></h1>
    57 
    58 
    59 
    60 
    61 
    62 
    63 
    64 
    65 <h3>Navigation</h3>
    66 <ul>
    67 <li class="toctree-l1"><a class="reference internal" href="../ammosreader.html">ammosreader package</a></li>
    68 </ul>
    69 
    70 <div class="relations">
    71 <h3>Related Topics</h3>
    72 <ul>
    73   <li><a href="../index.html">Documentation overview</a><ul>
    74   </ul></li>
    75 </ul>
    76 </div>
    77 <div id="searchbox" style="display: none" role="search">
    78   <h3 id="searchlabel">Quick search</h3>
    79     <div class="searchformwrapper">
    80     <form class="search" action="../search.html" method="get">
    81       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    82       <input type="submit" value="Go" />
    83     </form>
     84    <div class="footer">
     85    <p>
     86      &copy; Copyright 2022, KIDZg.
     87      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.4.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     88    (Revision )
     89        </p>
    8490    </div>
    85 </div>
    86 <script>$('#searchbox').show(0);</script>
    87 
    88 
    89 
    90 
    91 
    92 
    93 
    94 
    95         </div>
    96       </div>
    9791      <div class="clearer"></div>
    9892    </div>
    99     <div class="footer">
    100       &copy;2022, Enrico Schwass.
    101      
    102       |
    103       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    104       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    105      
    106     </div>
    107 
    108    
    109 
    110    
     93        <div id="breadcrumbs">
     94                Overview: module code
     95        </div>
     96        <script type="text/javascript" charset="utf-8" src="../_static/js/toc.js"></script>
    11197  </body>
    11298</html>
  • doc/html/_static/basic.css

    rf3421e6 r5547430  
    55 * Sphinx stylesheet -- basic theme.
    66 *
    7  * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
     7 * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    88 * :license: BSD, see LICENSE for details.
    99 *
     
    732732.classifier:before {
    733733    font-style: normal;
    734     margin: 0.5em;
     734    margin: 0 0.5em;
    735735    content: ":";
     736    display: inline-block;
    736737}
    737738
     
    757758    -webkit-hyphens: none;
    758759    hyphens: none;
     760    white-space: nowrap;
    759761}
    760762
  • doc/html/_static/doctools.js

    rf3421e6 r5547430  
    55 * Sphinx JavaScript utilities for all documentation.
    66 *
    7  * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
     7 * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    88 * :license: BSD, see LICENSE for details.
    99 *
     
    265265    $('#searchbox .highlight-link').fadeOut(300);
    266266    $('span.highlighted').removeClass('highlighted');
     267    var url = new URL(window.location);
     268    url.searchParams.delete('highlight');
     269    window.history.replaceState({}, '', url);
    267270  },
    268271
  • doc/html/_static/language_data.js

    rf3421e6 r5547430  
    66 * namely the list of stopwords, stemmer, scorer and splitter.
    77 *
    8  * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
     8 * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    99 * :license: BSD, see LICENSE for details.
    1010 *
  • doc/html/_static/pygments.css

    rf3421e6 r5547430  
    55span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
    66.highlight .hll { background-color: #ffffcc }
    7 .highlight { background: #f8f8f8; }
    8 .highlight .c { color: #8f5902; font-style: italic } /* Comment */
    9 .highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
    10 .highlight .g { color: #000000 } /* Generic */
    11 .highlight .k { color: #004461; font-weight: bold } /* Keyword */
    12 .highlight .l { color: #000000 } /* Literal */
    13 .highlight .n { color: #000000 } /* Name */
    14 .highlight .o { color: #582800 } /* Operator */
    15 .highlight .x { color: #000000 } /* Other */
    16 .highlight .p { color: #000000; font-weight: bold } /* Punctuation */
    17 .highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
    18 .highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
    19 .highlight .cp { color: #8f5902 } /* Comment.Preproc */
    20 .highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
    21 .highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
    22 .highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
    23 .highlight .gd { color: #a40000 } /* Generic.Deleted */
    24 .highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
    25 .highlight .gr { color: #ef2929 } /* Generic.Error */
    26 .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
    27 .highlight .gi { color: #00A000 } /* Generic.Inserted */
    28 .highlight .go { color: #888888 } /* Generic.Output */
    29 .highlight .gp { color: #745334 } /* Generic.Prompt */
    30 .highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
    31 .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
    32 .highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
    33 .highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */
    34 .highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */
    35 .highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */
    36 .highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */
    37 .highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */
    38 .highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */
    39 .highlight .ld { color: #000000 } /* Literal.Date */
    40 .highlight .m { color: #990000 } /* Literal.Number */
    41 .highlight .s { color: #4e9a06 } /* Literal.String */
    42 .highlight .na { color: #c4a000 } /* Name.Attribute */
    43 .highlight .nb { color: #004461 } /* Name.Builtin */
    44 .highlight .nc { color: #000000 } /* Name.Class */
    45 .highlight .no { color: #000000 } /* Name.Constant */
    46 .highlight .nd { color: #888888 } /* Name.Decorator */
    47 .highlight .ni { color: #ce5c00 } /* Name.Entity */
    48 .highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
    49 .highlight .nf { color: #000000 } /* Name.Function */
    50 .highlight .nl { color: #f57900 } /* Name.Label */
    51 .highlight .nn { color: #000000 } /* Name.Namespace */
    52 .highlight .nx { color: #000000 } /* Name.Other */
    53 .highlight .py { color: #000000 } /* Name.Property */
    54 .highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
    55 .highlight .nv { color: #000000 } /* Name.Variable */
    56 .highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
    57 .highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
    58 .highlight .mb { color: #990000 } /* Literal.Number.Bin */
    59 .highlight .mf { color: #990000 } /* Literal.Number.Float */
    60 .highlight .mh { color: #990000 } /* Literal.Number.Hex */
    61 .highlight .mi { color: #990000 } /* Literal.Number.Integer */
    62 .highlight .mo { color: #990000 } /* Literal.Number.Oct */
    63 .highlight .sa { color: #4e9a06 } /* Literal.String.Affix */
    64 .highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
    65 .highlight .sc { color: #4e9a06 } /* Literal.String.Char */
    66 .highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */
    67 .highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
    68 .highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
    69 .highlight .se { color: #4e9a06 } /* Literal.String.Escape */
    70 .highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
    71 .highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
    72 .highlight .sx { color: #4e9a06 } /* Literal.String.Other */
    73 .highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
    74 .highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
    75 .highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
    76 .highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
    77 .highlight .fm { color: #000000 } /* Name.Function.Magic */
    78 .highlight .vc { color: #000000 } /* Name.Variable.Class */
    79 .highlight .vg { color: #000000 } /* Name.Variable.Global */
    80 .highlight .vi { color: #000000 } /* Name.Variable.Instance */
    81 .highlight .vm { color: #000000 } /* Name.Variable.Magic */
    82 .highlight .il { color: #990000 } /* Literal.Number.Integer.Long */
     7.highlight { background: #ffffff; }
  • doc/html/_static/searchtools.js

    rf3421e6 r5547430  
    55 * Sphinx JavaScript utilities for the full-text search.
    66 *
    7  * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
     7 * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    88 * :license: BSD, see LICENSE for details.
    99 *
     
    329329
    330330    for (var prefix in objects) {
    331       for (var name in objects[prefix]) {
     331      for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) {
     332        var match = objects[prefix][iMatch];
     333        var name = match[4];
    332334        var fullname = (prefix ? prefix + '.' : '') + name;
    333335        var fullnameLower = fullname.toLowerCase()
     
    343345            score += Scorer.objPartialMatch;
    344346          }
    345           var match = objects[prefix][name];
    346347          var objname = objnames[match[1]][2];
    347348          var title = titles[match[0]];
  • doc/html/ammosreader.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    99    <title>ammosreader package &#8212; AmmosReader 0.314 documentation</title>
    1010    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
    11     <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
     11    <link rel="stylesheet" type="text/css" href="_static/css/adctheme.css" />
    1212    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
    1313    <script src="_static/jquery.js"></script>
    1414    <script src="_static/underscore.js"></script>
    1515    <script src="_static/doctools.js"></script>
     16    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1617    <link rel="index" title="Index" href="genindex.html" />
    1718    <link rel="search" title="Search" href="search.html" />
     19    <link rel="top" title="AmmosReader 0.314 documentation" href="index.html" />
    1820    <link rel="prev" title="ammosreader" href="index.html" />
    19    
    20   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
    21  
    22  
    23   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
    24 
     21    <link media="only screen and (max-device-width: 480px)" href="_static/css/mobile.css" type="text/css" rel="stylesheet" />
    2522  </head><body>
    26  
     23<div id="docstitle">
     24    <p>AmmosReader 0.314 documentation</p>
     25</div>
     26<div id="header">
     27    <div id="title"><h1>ammosreader package</h1></div>
     28    <ul id="headerButtons">
     29        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     30        <li id="page_buttons">
     31            <div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
     32            <div class="headerButton"><a href="py-modindex.html" title="Python Module Index" >modules</a></div>
     33            <div class="headerButton"><a href="index.html" title="ammosreader" accesskey="P">previous</a></div>
     34        </li>
     35    </ul>
     36</div>
     37
     38<div id="sphinxsidebar">
     39  <div class="sphinxsidebarwrapper">
     40        <ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
     41        <ul class="current">
     42<li class="toctree-l1 current"><a class="current reference internal" href="#">ammosreader package</a><ul>
     43<li class="toctree-l2"><a class="reference internal" href="#submodules">Submodules</a></li>
     44<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosAudioDataHeader">ammosreader.AmmosAudioDataHeader module</a></li>
     45<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosAudioReader">ammosreader.AmmosAudioReader module</a></li>
     46<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosAudioSocketReader">ammosreader.AmmosAudioSocketReader module</a></li>
     47<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosContainer">ammosreader.AmmosContainer module</a></li>
     48<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosExtendedAudioDataHeader">ammosreader.AmmosExtendedAudioDataHeader module</a></li>
     49<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosExtendedIFDataHeader">ammosreader.AmmosExtendedIFDataHeader module</a></li>
     50<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosGlobalFrameBody">ammosreader.AmmosGlobalFrameBody module</a></li>
     51<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosGlobalFrameHeader">ammosreader.AmmosGlobalFrameHeader module</a></li>
     52<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosIFDataBlock">ammosreader.AmmosIFDataBlock module</a></li>
     53<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosIFDataHeader">ammosreader.AmmosIFDataHeader module</a></li>
     54<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosIFReader">ammosreader.AmmosIFReader module</a></li>
     55<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosSingleFrame">ammosreader.AmmosSingleFrame module</a></li>
     56<li class="toctree-l2"><a class="reference internal" href="#ammosreader-iqdwtxblock-module">ammosreader.IQDWTXBlock module</a></li>
     57<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.PDW">ammosreader.PDW module</a></li>
     58<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.PPDWContainer">ammosreader.PPDWContainer module</a></li>
     59<li class="toctree-l2"><a class="reference internal" href="#module-ammosreader">Module contents</a></li>
     60</ul>
     61</li>
     62</ul>
     63
     64      <h3>This Page</h3>
     65      <ul class="this-page-menu">
     66        <li><a href="_sources/ammosreader.rst.txt"
     67               rel="nofollow">Show Source</a></li>
     68      </ul>
     69    <div id="searchbox" style="display: none">
     70        <form class="search" action="search.html" method="get">
     71                        <div class="search-wrapper">
     72                        <input type="submit" value="" class="search-left"/>
     73                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     74                        <span class="search-right">&nbsp;</span>
     75                        </div>
     76          <input type="hidden" name="check_keywords" value="yes" />
     77          <input type="hidden" name="area" value="default" />
     78        </form>
     79    </div>
     80    <script type="text/javascript">$('#searchbox').show(0);</script>
     81  </div>
     82</div>
     83
     84
    2785
    2886    <div class="document">
    2987      <div class="documentwrapper">
    3088        <div class="bodywrapper">
    31          
    32 
    33           <div class="body" role="main">
     89          <div class="body">
    3490           
    3591  <section id="ammosreader-package">
     
    4298<dl class="py class">
    4399<dt class="sig sig-object py" id="ammosreader.AmmosAudioDataHeader.AmmosAudioDataHeader">
    44 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosAudioDataHeader.</span></span><span class="sig-name descname"><span class="pre">AmmosAudioDataHeader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sample_rate</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">status</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">demod_bandwidth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">demod_type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_count</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">channel_count</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosAudioDataHeader.html#AmmosAudioDataHeader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosAudioDataHeader.AmmosAudioDataHeader" title="Permalink to this definition">¶</a></dt>
     100<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosAudioDataHeader.</span></span><span class="sig-name descname"><span class="pre">AmmosAudioDataHeader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sample_rate</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">status</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">demod_bandwidth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">demod_type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_count</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">channel_count</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosAudioDataHeader.html#AmmosAudioDataHeader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosAudioDataHeader.AmmosAudioDataHeader" title="Permalink to this definition">¶</a></dt>
    45101<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    46102<dl class="py method">
    47103<dt class="sig sig-object py" id="ammosreader.AmmosAudioDataHeader.AmmosAudioDataHeader.from_bytes">
    48 <em class="property"><span class="pre">classmethod</span> </em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosAudioDataHeader.html#AmmosAudioDataHeader.from_bytes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosAudioDataHeader.AmmosAudioDataHeader.from_bytes" title="Permalink to this definition">¶</a></dt>
     104<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosAudioDataHeader.html#AmmosAudioDataHeader.from_bytes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosAudioDataHeader.AmmosAudioDataHeader.from_bytes" title="Permalink to this definition">¶</a></dt>
    49105<dd></dd></dl>
    50106
     
    53109<dl class="py class">
    54110<dt class="sig sig-object py" id="ammosreader.AmmosAudioDataHeader.AmmosAudioDemodType">
    55 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosAudioDataHeader.</span></span><span class="sig-name descname"><span class="pre">AmmosAudioDemodType</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">demod_type</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosAudioDataHeader.html#AmmosAudioDemodType"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosAudioDataHeader.AmmosAudioDemodType" title="Permalink to this definition">¶</a></dt>
     111<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosAudioDataHeader.</span></span><span class="sig-name descname"><span class="pre">AmmosAudioDemodType</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">demod_type</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosAudioDataHeader.html#AmmosAudioDemodType"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosAudioDataHeader.AmmosAudioDemodType" title="Permalink to this definition">¶</a></dt>
    56112<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    57113<dl class="py property">
    58114<dt class="sig sig-object py" id="ammosreader.AmmosAudioDataHeader.AmmosAudioDemodType.mapping">
    59 <em class="property"><span class="pre">class</span> <span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">mapping</span></span><a class="headerlink" href="#ammosreader.AmmosAudioDataHeader.AmmosAudioDemodType.mapping" title="Permalink to this definition">¶</a></dt>
    60 <dd></dd></dl>
     115<em class="property"><span class="pre">class</span><span class="w"> </span><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">mapping</span></span><a class="headerlink" href="#ammosreader.AmmosAudioDataHeader.AmmosAudioDemodType.mapping" title="Permalink to this definition">¶</a></dt>
     116<dd><p>dict() -&gt; new empty dictionary
     117dict(mapping) -&gt; new dictionary initialized from a mapping object’s</p>
     118<blockquote>
     119<div><p>(key, value) pairs</p>
     120</div></blockquote>
     121<dl>
     122<dt>dict(iterable) -&gt; new dictionary initialized as if via:</dt><dd><p>d = {}
     123for k, v in iterable:</p>
     124<blockquote>
     125<div><p>d[k] = v</p>
     126</div></blockquote>
     127</dd>
     128<dt>dict(<a href="#id1"><span class="problematic" id="id2">**</span></a>kwargs) -&gt; new dictionary initialized with the name=value pairs</dt><dd><p>in the keyword argument list.  For example:  dict(one=1, two=2)</p>
     129</dd>
     130</dl>
     131</dd></dl>
    61132
    62133</dd></dl>
     
    68139<dl class="py class">
    69140<dt class="sig sig-object py" id="ammosreader.AmmosAudioReader.AmmosAudioReader">
    70 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosAudioReader.</span></span><span class="sig-name descname"><span class="pre">AmmosAudioReader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file_name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosAudioReader.html#AmmosAudioReader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosAudioReader.AmmosAudioReader" title="Permalink to this definition">¶</a></dt>
     141<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosAudioReader.</span></span><span class="sig-name descname"><span class="pre">AmmosAudioReader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file_name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosAudioReader.html#AmmosAudioReader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosAudioReader.AmmosAudioReader" title="Permalink to this definition">¶</a></dt>
    71142<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    72143<p>I read the audio data embedded in an R&amp;S AMMOS recording.</p>
    73144<dl class="py attribute">
    74145<dt class="sig sig-object py" id="ammosreader.AmmosAudioReader.AmmosAudioReader.EXTENDED_AUDIO_DATA_HEADER_SIZE">
    75 <span class="sig-name descname"><span class="pre">EXTENDED_AUDIO_DATA_HEADER_SIZE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">44</span></em><a class="headerlink" href="#ammosreader.AmmosAudioReader.AmmosAudioReader.EXTENDED_AUDIO_DATA_HEADER_SIZE" title="Permalink to this definition">¶</a></dt>
     146<span class="sig-name descname"><span class="pre">EXTENDED_AUDIO_DATA_HEADER_SIZE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">44</span></em><a class="headerlink" href="#ammosreader.AmmosAudioReader.AmmosAudioReader.EXTENDED_AUDIO_DATA_HEADER_SIZE" title="Permalink to this definition">¶</a></dt>
    76147<dd></dd></dl>
    77148
    78149<dl class="py attribute">
    79150<dt class="sig sig-object py" id="ammosreader.AmmosAudioReader.AmmosAudioReader.GLOBAL_HEADER_SIZE">
    80 <span class="sig-name descname"><span class="pre">GLOBAL_HEADER_SIZE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">24</span></em><a class="headerlink" href="#ammosreader.AmmosAudioReader.AmmosAudioReader.GLOBAL_HEADER_SIZE" title="Permalink to this definition">¶</a></dt>
     151<span class="sig-name descname"><span class="pre">GLOBAL_HEADER_SIZE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">24</span></em><a class="headerlink" href="#ammosreader.AmmosAudioReader.AmmosAudioReader.GLOBAL_HEADER_SIZE" title="Permalink to this definition">¶</a></dt>
    81152<dd></dd></dl>
    82153
    83154<dl class="py attribute">
    84155<dt class="sig sig-object py" id="ammosreader.AmmosAudioReader.AmmosAudioReader.STANDARD_AUDIO_DATA_HEADER_SIZE">
    85 <span class="sig-name descname"><span class="pre">STANDARD_AUDIO_DATA_HEADER_SIZE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">36</span></em><a class="headerlink" href="#ammosreader.AmmosAudioReader.AmmosAudioReader.STANDARD_AUDIO_DATA_HEADER_SIZE" title="Permalink to this definition">¶</a></dt>
     156<span class="sig-name descname"><span class="pre">STANDARD_AUDIO_DATA_HEADER_SIZE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">36</span></em><a class="headerlink" href="#ammosreader.AmmosAudioReader.AmmosAudioReader.STANDARD_AUDIO_DATA_HEADER_SIZE" title="Permalink to this definition">¶</a></dt>
    86157<dd></dd></dl>
    87158
     
    200271<dl class="py class">
    201272<dt class="sig sig-object py" id="ammosreader.AmmosAudioSocketReader.AmmosAudioSocketReader">
    202 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosAudioSocketReader.</span></span><span class="sig-name descname"><span class="pre">AmmosAudioSocketReader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">socket</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">socket.socket</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosAudioSocketReader.html#AmmosAudioSocketReader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosAudioSocketReader.AmmosAudioSocketReader" title="Permalink to this definition">¶</a></dt>
     273<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosAudioSocketReader.</span></span><span class="sig-name descname"><span class="pre">AmmosAudioSocketReader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">socket</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">socket.socket</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosAudioSocketReader.html#AmmosAudioSocketReader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosAudioSocketReader.AmmosAudioSocketReader" title="Permalink to this definition">¶</a></dt>
    203274<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    204275<dl class="py method">
    205276<dt class="sig sig-object py" id="ammosreader.AmmosAudioSocketReader.AmmosAudioSocketReader.read_next_frame">
    206 <span class="sig-name descname"><span class="pre">read_next_frame</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">bytearray</span><span class="p"><span class="pre">,</span> </span><span class="pre">int</span><span class="p"><span class="pre">]</span></span></span></span><a class="reference internal" href="_modules/ammosreader/AmmosAudioSocketReader.html#AmmosAudioSocketReader.read_next_frame"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosAudioSocketReader.AmmosAudioSocketReader.read_next_frame" title="Permalink to this definition">¶</a></dt>
     277<span class="sig-name descname"><span class="pre">read_next_frame</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">bytearray</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">int</span><span class="p"><span class="pre">]</span></span></span></span><a class="reference internal" href="_modules/ammosreader/AmmosAudioSocketReader.html#AmmosAudioSocketReader.read_next_frame"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosAudioSocketReader.AmmosAudioSocketReader.read_next_frame" title="Permalink to this definition">¶</a></dt>
    207278<dd><p>reads the next ammos audio frame</p>
    208279<dl class="simple">
     
    219290<dl class="py class">
    220291<dt class="sig sig-object py" id="ammosreader.AmmosContainer.AmmosContainer">
    221 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosContainer.</span></span><span class="sig-name descname"><span class="pre">AmmosContainer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frames</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosContainer.html#AmmosContainer"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosContainer.AmmosContainer" title="Permalink to this definition">¶</a></dt>
     292<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosContainer.</span></span><span class="sig-name descname"><span class="pre">AmmosContainer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frames</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosContainer.html#AmmosContainer"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosContainer.AmmosContainer" title="Permalink to this definition">¶</a></dt>
    222293<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    223294<dl class="py method">
     
    248319<dl class="py class">
    249320<dt class="sig sig-object py" id="ammosreader.AmmosExtendedAudioDataHeader.AmmosExtendedAudioDataHeader">
    250 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosExtendedAudioDataHeader.</span></span><span class="sig-name descname"><span class="pre">AmmosExtendedAudioDataHeader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sample_rate</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">status</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">demod_bandwidth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">demod_type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_count</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">channel_count</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timestamp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosExtendedAudioDataHeader.html#AmmosExtendedAudioDataHeader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosExtendedAudioDataHeader.AmmosExtendedAudioDataHeader" title="Permalink to this definition">¶</a></dt>
     321<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosExtendedAudioDataHeader.</span></span><span class="sig-name descname"><span class="pre">AmmosExtendedAudioDataHeader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sample_rate</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">status</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">demod_bandwidth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">demod_type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_count</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">channel_count</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timestamp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosExtendedAudioDataHeader.html#AmmosExtendedAudioDataHeader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosExtendedAudioDataHeader.AmmosExtendedAudioDataHeader" title="Permalink to this definition">¶</a></dt>
    251322<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    252323<dl class="py method">
    253324<dt class="sig sig-object py" id="ammosreader.AmmosExtendedAudioDataHeader.AmmosExtendedAudioDataHeader.from_bytes">
    254 <em class="property"><span class="pre">classmethod</span> </em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosExtendedAudioDataHeader.html#AmmosExtendedAudioDataHeader.from_bytes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosExtendedAudioDataHeader.AmmosExtendedAudioDataHeader.from_bytes" title="Permalink to this definition">¶</a></dt>
     325<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosExtendedAudioDataHeader.html#AmmosExtendedAudioDataHeader.from_bytes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosExtendedAudioDataHeader.AmmosExtendedAudioDataHeader.from_bytes" title="Permalink to this definition">¶</a></dt>
    255326<dd></dd></dl>
    256327
     
    262333<dl class="py class">
    263334<dt class="sig sig-object py" id="ammosreader.AmmosExtendedIFDataHeader.AmmosExtendedIFDataHeader">
    264 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosExtendedIFDataHeader.</span></span><span class="sig-name descname"><span class="pre">AmmosExtendedIFDataHeader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">block_count</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">block_length</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timestamp</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">status</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source_state</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bandwidth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_rate</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">interpolation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">decimation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">voltage_ref</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stream_start</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_counter</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">antenna_correction</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosExtendedIFDataHeader.html#AmmosExtendedIFDataHeader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosExtendedIFDataHeader.AmmosExtendedIFDataHeader" title="Permalink to this definition">¶</a></dt>
     335<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosExtendedIFDataHeader.</span></span><span class="sig-name descname"><span class="pre">AmmosExtendedIFDataHeader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">block_count</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">block_length</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timestamp</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">status</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source_state</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bandwidth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_rate</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">interpolation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">decimation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">voltage_ref</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stream_start</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_counter</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">antenna_correction</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosExtendedIFDataHeader.html#AmmosExtendedIFDataHeader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosExtendedIFDataHeader.AmmosExtendedIFDataHeader" title="Permalink to this definition">¶</a></dt>
    265336<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    266337<dl class="py method">
    267338<dt class="sig sig-object py" id="ammosreader.AmmosExtendedIFDataHeader.AmmosExtendedIFDataHeader.from_bytes">
    268 <em class="property"><span class="pre">classmethod</span> </em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosExtendedIFDataHeader.html#AmmosExtendedIFDataHeader.from_bytes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosExtendedIFDataHeader.AmmosExtendedIFDataHeader.from_bytes" title="Permalink to this definition">¶</a></dt>
     339<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosExtendedIFDataHeader.html#AmmosExtendedIFDataHeader.from_bytes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosExtendedIFDataHeader.AmmosExtendedIFDataHeader.from_bytes" title="Permalink to this definition">¶</a></dt>
    269340<dd></dd></dl>
    270341
     
    276347<dl class="py class">
    277348<dt class="sig sig-object py" id="ammosreader.AmmosGlobalFrameBody.AmmosGlobalFrameBody">
    278 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosGlobalFrameBody.</span></span><span class="sig-name descname"><span class="pre">AmmosGlobalFrameBody</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data_header</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_body</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosGlobalFrameBody.html#AmmosGlobalFrameBody"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosGlobalFrameBody.AmmosGlobalFrameBody" title="Permalink to this definition">¶</a></dt>
     349<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosGlobalFrameBody.</span></span><span class="sig-name descname"><span class="pre">AmmosGlobalFrameBody</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data_header</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_body</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosGlobalFrameBody.html#AmmosGlobalFrameBody"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosGlobalFrameBody.AmmosGlobalFrameBody" title="Permalink to this definition">¶</a></dt>
    279350<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    280351<dl class="py method">
     
    290361<dl class="py class">
    291362<dt class="sig sig-object py" id="ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader">
    292 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosGlobalFrameHeader.</span></span><span class="sig-name descname"><span class="pre">AmmosGlobalFrameHeader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">magic_word</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frame_length</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">running_frame_number</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frame_type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_header_length</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reserved</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosGlobalFrameHeader.html#AmmosGlobalFrameHeader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader" title="Permalink to this definition">¶</a></dt>
     363<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosGlobalFrameHeader.</span></span><span class="sig-name descname"><span class="pre">AmmosGlobalFrameHeader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">magic_word</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frame_length</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">running_frame_number</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frame_type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_header_length</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reserved</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosGlobalFrameHeader.html#AmmosGlobalFrameHeader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader" title="Permalink to this definition">¶</a></dt>
    293364<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    294365<dl class="py attribute">
    295366<dt class="sig sig-object py" id="ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader.MAGIC_WORD">
    296 <span class="sig-name descname"><span class="pre">MAGIC_WORD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'726574fb'</span></em><a class="headerlink" href="#ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader.MAGIC_WORD" title="Permalink to this definition">¶</a></dt>
     367<span class="sig-name descname"><span class="pre">MAGIC_WORD</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'726574fb'</span></em><a class="headerlink" href="#ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader.MAGIC_WORD" title="Permalink to this definition">¶</a></dt>
    297368<dd></dd></dl>
    298369
    299370<dl class="py method">
    300371<dt class="sig sig-object py" id="ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader.from_bytes">
    301 <em class="property"><span class="pre">classmethod</span> </em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosGlobalFrameHeader.html#AmmosGlobalFrameHeader.from_bytes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader.from_bytes" title="Permalink to this definition">¶</a></dt>
     372<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosGlobalFrameHeader.html#AmmosGlobalFrameHeader.from_bytes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader.from_bytes" title="Permalink to this definition">¶</a></dt>
    302373<dd></dd></dl>
    303374
     
    314385<dl class="py class">
    315386<dt class="sig sig-object py" id="ammosreader.AmmosIFDataBlock.AmmosIFDataBlock">
    316 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosIFDataBlock.</span></span><span class="sig-name descname"><span class="pre">AmmosIFDataBlock</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">if_datablock_header</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">if_data</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosIFDataBlock.html#AmmosIFDataBlock"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosIFDataBlock.AmmosIFDataBlock" title="Permalink to this definition">¶</a></dt>
     387<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosIFDataBlock.</span></span><span class="sig-name descname"><span class="pre">AmmosIFDataBlock</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">if_datablock_header</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">if_data</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosIFDataBlock.html#AmmosIFDataBlock"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosIFDataBlock.AmmosIFDataBlock" title="Permalink to this definition">¶</a></dt>
    317388<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    318389</dd></dl>
     
    323394<dl class="py class">
    324395<dt class="sig sig-object py" id="ammosreader.AmmosIFDataHeader.AmmosIFDataHeader">
    325 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosIFDataHeader.</span></span><span class="sig-name descname"><span class="pre">AmmosIFDataHeader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">block_count</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">block_length</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timestamp</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">status</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source_state</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bandwidth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_rate</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">interpolation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">decimation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">voltage_ref</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosIFDataHeader.html#AmmosIFDataHeader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosIFDataHeader.AmmosIFDataHeader" title="Permalink to this definition">¶</a></dt>
     396<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosIFDataHeader.</span></span><span class="sig-name descname"><span class="pre">AmmosIFDataHeader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">block_count</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">block_length</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timestamp</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">status</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source_state</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bandwidth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_rate</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">interpolation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">decimation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">voltage_ref</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosIFDataHeader.html#AmmosIFDataHeader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosIFDataHeader.AmmosIFDataHeader" title="Permalink to this definition">¶</a></dt>
    326397<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    327398<dl class="py method">
    328399<dt class="sig sig-object py" id="ammosreader.AmmosIFDataHeader.AmmosIFDataHeader.from_bytes">
    329 <em class="property"><span class="pre">classmethod</span> </em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosIFDataHeader.html#AmmosIFDataHeader.from_bytes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosIFDataHeader.AmmosIFDataHeader.from_bytes" title="Permalink to this definition">¶</a></dt>
     400<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosIFDataHeader.html#AmmosIFDataHeader.from_bytes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosIFDataHeader.AmmosIFDataHeader.from_bytes" title="Permalink to this definition">¶</a></dt>
    330401<dd></dd></dl>
    331402
     
    342413<dl class="py class">
    343414<dt class="sig sig-object py" id="ammosreader.AmmosIFReader.AmmosIFReader">
    344 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosIFReader.</span></span><span class="sig-name descname"><span class="pre">AmmosIFReader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file_name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosIFReader.html#AmmosIFReader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosIFReader.AmmosIFReader" title="Permalink to this definition">¶</a></dt>
     415<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosIFReader.</span></span><span class="sig-name descname"><span class="pre">AmmosIFReader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file_name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosIFReader.html#AmmosIFReader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosIFReader.AmmosIFReader" title="Permalink to this definition">¶</a></dt>
    345416<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    346417<dl class="py method">
     
    396467<dl class="py class">
    397468<dt class="sig sig-object py" id="ammosreader.AmmosSingleFrame.AmmosSingleFrame">
    398 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosSingleFrame.</span></span><span class="sig-name descname"><span class="pre">AmmosSingleFrame</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">global_frame_header</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">global_frame_body</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosSingleFrame.html#AmmosSingleFrame"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosSingleFrame.AmmosSingleFrame" title="Permalink to this definition">¶</a></dt>
     469<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.AmmosSingleFrame.</span></span><span class="sig-name descname"><span class="pre">AmmosSingleFrame</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">global_frame_header</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">global_frame_body</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/AmmosSingleFrame.html#AmmosSingleFrame"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.AmmosSingleFrame.AmmosSingleFrame" title="Permalink to this definition">¶</a></dt>
    399470<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    400471<dl class="py method">
     
    418489<dl class="py class">
    419490<dt class="sig sig-object py" id="ammosreader.PDW.PDW">
    420 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.PDW.</span></span><span class="sig-name descname"><span class="pre">PDW</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">time_of_arrival</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pdw_format_identifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">center_frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">is_valid</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">is_pulse</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">level_unit</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">signal_start_missing</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">signal_end_missing</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pulse_width</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency_shift_or_bandwidth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pulse_level_or_pulse_field_strength</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">region_of_interest</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">azimuth_confidence</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">modulation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sector</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">polarity</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">df_quality</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">elevation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">azimuth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">channel</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/PDW.html#PDW"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.PDW.PDW" title="Permalink to this definition">¶</a></dt>
     491<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.PDW.</span></span><span class="sig-name descname"><span class="pre">PDW</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">time_of_arrival</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pdw_format_identifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">center_frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">is_valid</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">is_pulse</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">level_unit</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">signal_start_missing</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">signal_end_missing</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pulse_width</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency_shift_or_bandwidth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pulse_level_or_pulse_field_strength</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">region_of_interest</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">azimuth_confidence</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">modulation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sector</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">polarity</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">df_quality</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">elevation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">azimuth</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">channel</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/PDW.html#PDW"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.PDW.PDW" title="Permalink to this definition">¶</a></dt>
    421492<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    422493<p>I store information from a single ppdw data block.</p>
     
    460531<dl class="py method">
    461532<dt class="sig sig-object py" id="ammosreader.PDW.PDW.from_bytes">
    462 <em class="property"><span class="pre">classmethod</span> </em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">byte_string</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/PDW.html#PDW.from_bytes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.PDW.PDW.from_bytes" title="Permalink to this definition">¶</a></dt>
     533<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">byte_string</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/PDW.html#PDW.from_bytes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.PDW.PDW.from_bytes" title="Permalink to this definition">¶</a></dt>
    463534<dd><p>I create an instance of class PDW from data body (8 * 32 bits)</p>
    464535<dl class="field-list simple">
     
    482553<dl class="py class">
    483554<dt class="sig sig-object py" id="ammosreader.PPDWContainer.PPDWContainer">
    484 <em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">ammosreader.PPDWContainer.</span></span><span class="sig-name descname"><span class="pre">PPDWContainer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">signals</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/PPDWContainer.html#PPDWContainer"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.PPDWContainer.PPDWContainer" title="Permalink to this definition">¶</a></dt>
     555<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">ammosreader.PPDWContainer.</span></span><span class="sig-name descname"><span class="pre">PPDWContainer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">signals</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ammosreader/PPDWContainer.html#PPDWContainer"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ammosreader.PPDWContainer.PPDWContainer" title="Permalink to this definition">¶</a></dt>
    485556<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
    486557<p>I store multiple signals imported from one or more .ppdw files</p>
     
    499570
    500571
    501           </div>
    502          
     572          </div>
    503573        </div>
    504574      </div>
    505       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    506         <div class="sphinxsidebarwrapper">
    507 <h1 class="logo"><a href="index.html">AmmosReader</a></h1>
    508 
    509 
    510 
    511 
    512 
    513 
    514 
    515 
    516 <h3>Navigation</h3>
    517 <ul class="current">
    518 <li class="toctree-l1 current"><a class="current reference internal" href="#">ammosreader package</a><ul>
    519 <li class="toctree-l2"><a class="reference internal" href="#submodules">Submodules</a></li>
    520 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosAudioDataHeader">ammosreader.AmmosAudioDataHeader module</a></li>
    521 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosAudioReader">ammosreader.AmmosAudioReader module</a></li>
    522 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosAudioSocketReader">ammosreader.AmmosAudioSocketReader module</a></li>
    523 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosContainer">ammosreader.AmmosContainer module</a></li>
    524 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosExtendedAudioDataHeader">ammosreader.AmmosExtendedAudioDataHeader module</a></li>
    525 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosExtendedIFDataHeader">ammosreader.AmmosExtendedIFDataHeader module</a></li>
    526 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosGlobalFrameBody">ammosreader.AmmosGlobalFrameBody module</a></li>
    527 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosGlobalFrameHeader">ammosreader.AmmosGlobalFrameHeader module</a></li>
    528 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosIFDataBlock">ammosreader.AmmosIFDataBlock module</a></li>
    529 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosIFDataHeader">ammosreader.AmmosIFDataHeader module</a></li>
    530 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosIFReader">ammosreader.AmmosIFReader module</a></li>
    531 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.AmmosSingleFrame">ammosreader.AmmosSingleFrame module</a></li>
    532 <li class="toctree-l2"><a class="reference internal" href="#ammosreader-iqdwtxblock-module">ammosreader.IQDWTXBlock module</a></li>
    533 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.PDW">ammosreader.PDW module</a></li>
    534 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader.PPDWContainer">ammosreader.PPDWContainer module</a></li>
    535 <li class="toctree-l2"><a class="reference internal" href="#module-ammosreader">Module contents</a></li>
    536 </ul>
    537 </li>
    538 </ul>
    539 
    540 <div class="relations">
    541 <h3>Related Topics</h3>
    542 <ul>
    543   <li><a href="index.html">Documentation overview</a><ul>
    544       <li>Previous: <a href="index.html" title="previous chapter">ammosreader</a></li>
    545   </ul></li>
    546 </ul>
    547 </div>
    548 <div id="searchbox" style="display: none" role="search">
    549   <h3 id="searchlabel">Quick search</h3>
    550     <div class="searchformwrapper">
    551     <form class="search" action="search.html" method="get">
    552       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    553       <input type="submit" value="Go" />
    554     </form>
     575    <div class="footer">
     576    <p>
     577      &copy; Copyright 2022, KIDZg.
     578      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.4.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     579    (Revision )
     580        </p>
    555581    </div>
    556 </div>
    557 <script>$('#searchbox').show(0);</script>
    558 
    559 
    560 
    561 
    562 
    563 
    564 
    565 
    566         </div>
    567       </div>
    568582      <div class="clearer"></div>
    569583    </div>
    570     <div class="footer">
    571       &copy;2022, Enrico Schwass.
    572      
    573       |
    574       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    575       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    576      
    577       |
    578       <a href="_sources/ammosreader.rst.txt"
    579           rel="nofollow">Page source</a>
    580     </div>
    581 
    582    
    583 
    584    
     584        <div id="breadcrumbs">
     585                ammosreader package
     586        </div>
     587        <script type="text/javascript" charset="utf-8" src="_static/js/toc.js"></script>
    585588  </body>
    586589</html>
  • doc/html/genindex.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>Index &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="_static/css/adctheme.css" />
    1111    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
    1212    <script src="_static/jquery.js"></script>
    1313    <script src="_static/underscore.js"></script>
    1414    <script src="_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="#" />
    1617    <link rel="search" title="Search" href="search.html" />
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="index.html" />
     19    <link media="only screen and (max-device-width: 480px)" href="_static/css/mobile.css" type="text/css" rel="stylesheet" />
     20  </head><body>
     21<div id="docstitle">
     22    <p>AmmosReader 0.314 documentation</p>
     23</div>
     24<div id="header">
     25    <div id="title"><h1>Index</h1></div>
     26    <ul id="headerButtons">
     27        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     28        <li id="page_buttons">
     29            <div class="headerButton"><a href="#" title="General Index" accesskey="I">index</a></div>
     30            <div class="headerButton"><a href="py-modindex.html" title="Python Module Index" >modules</a></div>
     31        </li>
     32    </ul>
     33</div>
     34
     35<div id="sphinxsidebar">
     36  <div class="sphinxsidebarwrapper">
     37        <ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
     38        <ul>
     39<li class="toctree-l1"><a class="reference internal" href="ammosreader.html">ammosreader package</a></li>
     40</ul>
     41
     42
    1743   
    18   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
    19  
    20  
    21   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
    22 
    23   </head><body>
    24  
     44
     45    <div id="searchbox" style="display: none">
     46        <form class="search" action="search.html" method="get">
     47                        <div class="search-wrapper">
     48                        <input type="submit" value="" class="search-left"/>
     49                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     50                        <span class="search-right">&nbsp;</span>
     51                        </div>
     52          <input type="hidden" name="check_keywords" value="yes" />
     53          <input type="hidden" name="area" value="default" />
     54        </form>
     55    </div>
     56    <script type="text/javascript">$('#searchbox').show(0);</script>
     57  </div>
     58</div>
     59
     60
    2561
    2662    <div class="document">
    2763      <div class="documentwrapper">
    2864        <div class="bodywrapper">
    29          
    30 
    31           <div class="body" role="main">
     65          <div class="body">
    3266           
    3367
     
    5185<table style="width: 100%" class="indextable genindextable"><tr>
    5286  <td style="width: 33%; vertical-align: top;"><ul>
    53       <li><a href="PDW.html#ammosreader.PDW.PDW.__init__">__init__() (ammosreader.PDW.PDW method)</a>, <a href="ammosreader.html#ammosreader.PDW.PDW.__init__">[1]</a>
     87      <li><a href="ammosreader.html#ammosreader.PDW.PDW.__init__">__init__() (ammosreader.PDW.PDW method)</a>
    5488
    5589      <ul>
     
    194228
    195229      <ul>
    196         <li><a href="PDW.html#module-ammosreader.PDW">module</a>, <a href="ammosreader.html#module-ammosreader.PDW">[1]</a>
     230        <li><a href="ammosreader.html#module-ammosreader.PDW">module</a>
    197231</li>
    198232      </ul></li>
     
    245279        <li><a href="ammosreader.html#ammosreader.AmmosIFDataHeader.AmmosIFDataHeader.from_bytes">(ammosreader.AmmosIFDataHeader.AmmosIFDataHeader class method)</a>
    246280</li>
    247         <li><a href="PDW.html#ammosreader.PDW.PDW.from_bytes">(ammosreader.PDW.PDW class method)</a>, <a href="ammosreader.html#ammosreader.PDW.PDW.from_bytes">[1]</a>
     281        <li><a href="ammosreader.html#ammosreader.PDW.PDW.from_bytes">(ammosreader.PDW.PDW class method)</a>
    248282</li>
    249283      </ul></li>
     
    304338        <li><a href="ammosreader.html#module-ammosreader.AmmosSingleFrame">ammosreader.AmmosSingleFrame</a>
    305339</li>
    306         <li><a href="PDW.html#module-ammosreader.PDW">ammosreader.PDW</a>, <a href="ammosreader.html#module-ammosreader.PDW">[1]</a>
     340        <li><a href="ammosreader.html#module-ammosreader.PDW">ammosreader.PDW</a>
    307341</li>
    308342        <li><a href="ammosreader.html#module-ammosreader.PPDWContainer">ammosreader.PPDWContainer</a>
     
    315349<table style="width: 100%" class="indextable genindextable"><tr>
    316350  <td style="width: 33%; vertical-align: top;"><ul>
    317       <li><a href="PDW.html#ammosreader.PDW.PDW">PDW (class in ammosreader.PDW)</a>, <a href="ammosreader.html#ammosreader.PDW.PDW">[1]</a>
     351      <li><a href="ammosreader.html#ammosreader.PDW.PDW">PDW (class in ammosreader.PDW)</a>
    318352</li>
    319353  </ul></td>
     
    400434
    401435
    402           </div>
    403          
     436          </div>
    404437        </div>
    405438      </div>
    406       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    407         <div class="sphinxsidebarwrapper">
    408 <h1 class="logo"><a href="index.html">AmmosReader</a></h1>
    409 
    410 
    411 
    412 
    413 
    414 
    415 
    416 
    417 <h3>Navigation</h3>
    418 <ul>
    419 <li class="toctree-l1"><a class="reference internal" href="ammosreader.html">ammosreader package</a></li>
    420 </ul>
    421 
    422 <div class="relations">
    423 <h3>Related Topics</h3>
    424 <ul>
    425   <li><a href="index.html">Documentation overview</a><ul>
    426   </ul></li>
    427 </ul>
    428 </div>
    429 <div id="searchbox" style="display: none" role="search">
    430   <h3 id="searchlabel">Quick search</h3>
    431     <div class="searchformwrapper">
    432     <form class="search" action="search.html" method="get">
    433       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    434       <input type="submit" value="Go" />
    435     </form>
     439    <div class="footer">
     440    <p>
     441      &copy; Copyright 2022, KIDZg.
     442      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.4.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     443    (Revision )
     444        </p>
    436445    </div>
    437 </div>
    438 <script>$('#searchbox').show(0);</script>
    439 
    440 
    441 
    442 
    443 
    444 
    445 
    446 
    447         </div>
    448       </div>
    449446      <div class="clearer"></div>
    450447    </div>
    451     <div class="footer">
    452       &copy;2022, Enrico Schwass.
    453      
    454       |
    455       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    456       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    457      
    458     </div>
    459 
    460    
    461 
    462    
     448        <div id="breadcrumbs">
     449                Index
     450        </div>
     451        <script type="text/javascript" charset="utf-8" src="_static/js/toc.js"></script>
    463452  </body>
    464453</html>
  • doc/html/index.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    99    <title>ammosreader &#8212; AmmosReader 0.314 documentation</title>
    1010    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
    11     <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
     11    <link rel="stylesheet" type="text/css" href="_static/css/adctheme.css" />
    1212    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
    1313    <script src="_static/jquery.js"></script>
    1414    <script src="_static/underscore.js"></script>
    1515    <script src="_static/doctools.js"></script>
     16    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1617    <link rel="index" title="Index" href="genindex.html" />
    1718    <link rel="search" title="Search" href="search.html" />
     19    <link rel="top" title="AmmosReader 0.314 documentation" href="#" />
    1820    <link rel="next" title="ammosreader package" href="ammosreader.html" />
    19    
    20   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
    21  
    22  
    23   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     21    <link media="only screen and (max-device-width: 480px)" href="_static/css/mobile.css" type="text/css" rel="stylesheet" />
     22  </head><body>
     23<div id="docstitle">
     24    <p>AmmosReader 0.314 documentation</p>
     25</div>
     26<div id="header">
     27    <div id="title"><h1>ammosreader</h1></div>
     28    <ul id="headerButtons">
     29        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     30        <li id="page_buttons">
     31            <div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
     32            <div class="headerButton"><a href="py-modindex.html" title="Python Module Index" >modules</a></div>
     33            <div class="headerButton"><a href="ammosreader.html" title="ammosreader package" accesskey="N">next</a></div>
     34        </li>
     35    </ul>
     36</div>
    2437
    25   </head><body>
    26  
     38<div id="sphinxsidebar">
     39  <div class="sphinxsidebarwrapper">
     40        <ul><li class="toctree-l1"><a href="#">Main Page</a></li></ul>
     41        <ul>
     42<li class="toctree-l1"><a class="reference internal" href="ammosreader.html">ammosreader package</a></li>
     43</ul>
     44
     45      <h3>This Page</h3>
     46      <ul class="this-page-menu">
     47        <li><a href="_sources/index.rst.txt"
     48               rel="nofollow">Show Source</a></li>
     49      </ul>
     50    <div id="searchbox" style="display: none">
     51        <form class="search" action="search.html" method="get">
     52                        <div class="search-wrapper">
     53                        <input type="submit" value="" class="search-left"/>
     54                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     55                        <span class="search-right">&nbsp;</span>
     56                        </div>
     57          <input type="hidden" name="check_keywords" value="yes" />
     58          <input type="hidden" name="area" value="default" />
     59        </form>
     60    </div>
     61    <script type="text/javascript">$('#searchbox').show(0);</script>
     62  </div>
     63</div>
     64
     65
    2766
    2867    <div class="document">
    2968      <div class="documentwrapper">
    3069        <div class="bodywrapper">
    31          
    32 
    33           <div class="body" role="main">
     70          <div class="body">
    3471           
    3572  <section id="ammosreader">
     
    6299
    63100
    64           </div>
    65          
     101          </div>
    66102        </div>
    67103      </div>
    68       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    69         <div class="sphinxsidebarwrapper">
    70 <h1 class="logo"><a href="#">AmmosReader</a></h1>
    71 
    72 
    73 
    74 
    75 
    76 
    77 
    78 
    79 <h3>Navigation</h3>
    80 <ul>
    81 <li class="toctree-l1"><a class="reference internal" href="ammosreader.html">ammosreader package</a></li>
    82 </ul>
    83 
    84 <div class="relations">
    85 <h3>Related Topics</h3>
    86 <ul>
    87   <li><a href="#">Documentation overview</a><ul>
    88       <li>Next: <a href="ammosreader.html" title="next chapter">ammosreader package</a></li>
    89   </ul></li>
    90 </ul>
    91 </div>
    92 <div id="searchbox" style="display: none" role="search">
    93   <h3 id="searchlabel">Quick search</h3>
    94     <div class="searchformwrapper">
    95     <form class="search" action="search.html" method="get">
    96       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    97       <input type="submit" value="Go" />
    98     </form>
     104    <div class="footer">
     105    <p>
     106      &copy; Copyright 2022, KIDZg.
     107      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.4.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     108    (Revision )
     109        </p>
    99110    </div>
    100 </div>
    101 <script>$('#searchbox').show(0);</script>
    102 
    103 
    104 
    105 
    106 
    107 
    108 
    109 
    110         </div>
    111       </div>
    112111      <div class="clearer"></div>
    113112    </div>
    114     <div class="footer">
    115       &copy;2022, Enrico Schwass.
    116      
    117       |
    118       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    119       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    120      
    121       |
    122       <a href="_sources/index.rst.txt"
    123           rel="nofollow">Page source</a>
    124     </div>
    125 
    126    
    127 
    128    
     113        <div id="breadcrumbs">
     114                ammosreader
     115        </div>
     116        <script type="text/javascript" charset="utf-8" src="_static/js/toc.js"></script>
    129117  </body>
    130118</html>
  • doc/html/modules.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    99    <title>ammosreader &#8212; AmmosReader 0.314 documentation</title>
    1010    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
    11     <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
     11    <link rel="stylesheet" type="text/css" href="_static/css/adctheme.css" />
    1212    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
    1313    <script src="_static/jquery.js"></script>
    1414    <script src="_static/underscore.js"></script>
    1515    <script src="_static/doctools.js"></script>
     16    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1617    <link rel="index" title="Index" href="genindex.html" />
    1718    <link rel="search" title="Search" href="search.html" />
    18    
    19   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
    20  
    21  
    22   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     19    <link rel="top" title="AmmosReader 0.314 documentation" href="index.html" />
     20    <link media="only screen and (max-device-width: 480px)" href="_static/css/mobile.css" type="text/css" rel="stylesheet" />
     21  </head><body>
     22<div id="docstitle">
     23    <p>AmmosReader 0.314 documentation</p>
     24</div>
     25<div id="header">
     26    <div id="title"><h1>ammosreader</h1></div>
     27    <ul id="headerButtons">
     28        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     29        <li id="page_buttons">
     30            <div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
     31            <div class="headerButton"><a href="py-modindex.html" title="Python Module Index" >modules</a></div>
     32        </li>
     33    </ul>
     34</div>
    2335
    24   </head><body>
    25  
     36<div id="sphinxsidebar">
     37  <div class="sphinxsidebarwrapper">
     38        <ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
     39        <ul>
     40<li class="toctree-l1"><a class="reference internal" href="ammosreader.html">ammosreader package</a></li>
     41</ul>
     42
     43      <h3>This Page</h3>
     44      <ul class="this-page-menu">
     45        <li><a href="_sources/modules.rst.txt"
     46               rel="nofollow">Show Source</a></li>
     47      </ul>
     48    <div id="searchbox" style="display: none">
     49        <form class="search" action="search.html" method="get">
     50                        <div class="search-wrapper">
     51                        <input type="submit" value="" class="search-left"/>
     52                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     53                        <span class="search-right">&nbsp;</span>
     54                        </div>
     55          <input type="hidden" name="check_keywords" value="yes" />
     56          <input type="hidden" name="area" value="default" />
     57        </form>
     58    </div>
     59    <script type="text/javascript">$('#searchbox').show(0);</script>
     60  </div>
     61</div>
     62
     63
    2664
    2765    <div class="document">
    2866      <div class="documentwrapper">
    2967        <div class="bodywrapper">
    30          
    31 
    32           <div class="body" role="main">
     68          <div class="body">
    3369           
    3470  <section id="ammosreader">
     
    6197
    6298
    63           </div>
    64          
     99          </div>
    65100        </div>
    66101      </div>
    67       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    68         <div class="sphinxsidebarwrapper">
    69 <h1 class="logo"><a href="index.html">AmmosReader</a></h1>
    70 
    71 
    72 
    73 
    74 
    75 
    76 
    77 
    78 <h3>Navigation</h3>
    79 <ul>
    80 <li class="toctree-l1"><a class="reference internal" href="ammosreader.html">ammosreader package</a></li>
    81 </ul>
    82 
    83 <div class="relations">
    84 <h3>Related Topics</h3>
    85 <ul>
    86   <li><a href="index.html">Documentation overview</a><ul>
    87   </ul></li>
    88 </ul>
    89 </div>
    90 <div id="searchbox" style="display: none" role="search">
    91   <h3 id="searchlabel">Quick search</h3>
    92     <div class="searchformwrapper">
    93     <form class="search" action="search.html" method="get">
    94       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    95       <input type="submit" value="Go" />
    96     </form>
     102    <div class="footer">
     103    <p>
     104      &copy; Copyright 2022, KIDZg.
     105      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.4.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     106    (Revision )
     107        </p>
    97108    </div>
    98 </div>
    99 <script>$('#searchbox').show(0);</script>
    100 
    101 
    102 
    103 
    104 
    105 
    106 
    107 
    108         </div>
    109       </div>
    110109      <div class="clearer"></div>
    111110    </div>
    112     <div class="footer">
    113       &copy;2022, Enrico Schwass.
    114      
    115       |
    116       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    117       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    118      
    119       |
    120       <a href="_sources/modules.rst.txt"
    121           rel="nofollow">Page source</a>
    122     </div>
    123 
    124    
    125 
    126    
     111        <div id="breadcrumbs">
     112                ammosreader
     113        </div>
     114        <script type="text/javascript" charset="utf-8" src="_static/js/toc.js"></script>
    127115  </body>
    128116</html>
  • doc/html/py-modindex.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>Python Module Index &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="_static/css/adctheme.css" />
    1111    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
    1212    <script src="_static/jquery.js"></script>
    1313    <script src="_static/underscore.js"></script>
    1414    <script src="_static/doctools.js"></script>
     15    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1516    <link rel="index" title="Index" href="genindex.html" />
    1617    <link rel="search" title="Search" href="search.html" />
    17 
    18    
    19   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
    20  
    21  
    22   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
    23 
     18    <link rel="top" title="AmmosReader 0.314 documentation" href="index.html" />
     19    <link media="only screen and (max-device-width: 480px)" href="_static/css/mobile.css" type="text/css" rel="stylesheet" />
     20 
    2421
    2522
    2623  </head><body>
    27  
     24<div id="docstitle">
     25    <p>AmmosReader 0.314 documentation</p>
     26</div>
     27<div id="header">
     28    <div id="title"><h1>Python Module Index</h1></div>
     29    <ul id="headerButtons">
     30        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     31        <li id="page_buttons">
     32            <div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
     33            <div class="headerButton"><a href="#" title="Python Module Index" >modules</a></div>
     34        </li>
     35    </ul>
     36</div>
     37
     38<div id="sphinxsidebar">
     39  <div class="sphinxsidebarwrapper">
     40        <ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
     41        <ul>
     42<li class="toctree-l1"><a class="reference internal" href="ammosreader.html">ammosreader package</a></li>
     43</ul>
     44
     45    <div id="searchbox" style="display: none">
     46        <form class="search" action="search.html" method="get">
     47                        <div class="search-wrapper">
     48                        <input type="submit" value="" class="search-left"/>
     49                        <input class="prettysearch" type="text" name="q" size="18" title="Enter search terms or a module, class or function name."/>
     50                        <span class="search-right">&nbsp;</span>
     51                        </div>
     52          <input type="hidden" name="check_keywords" value="yes" />
     53          <input type="hidden" name="area" value="default" />
     54        </form>
     55    </div>
     56    <script type="text/javascript">$('#searchbox').show(0);</script>
     57  </div>
     58</div>
     59
     60
    2861
    2962    <div class="document">
    3063      <div class="documentwrapper">
    3164        <div class="bodywrapper">
    32          
    33 
    34           <div class="body" role="main">
     65          <div class="body">
    3566           
    3667
     
    124155
    125156
    126           </div>
    127          
     157          </div>
    128158        </div>
    129159      </div>
    130       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    131         <div class="sphinxsidebarwrapper">
    132 <h1 class="logo"><a href="index.html">AmmosReader</a></h1>
    133 
    134 
    135 
    136 
    137 
    138 
    139 
    140 
    141 <h3>Navigation</h3>
    142 <ul>
    143 <li class="toctree-l1"><a class="reference internal" href="ammosreader.html">ammosreader package</a></li>
    144 </ul>
    145 
    146 <div class="relations">
    147 <h3>Related Topics</h3>
    148 <ul>
    149   <li><a href="index.html">Documentation overview</a><ul>
    150   </ul></li>
    151 </ul>
    152 </div>
    153 <div id="searchbox" style="display: none" role="search">
    154   <h3 id="searchlabel">Quick search</h3>
    155     <div class="searchformwrapper">
    156     <form class="search" action="search.html" method="get">
    157       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
    158       <input type="submit" value="Go" />
    159     </form>
     160    <div class="footer">
     161    <p>
     162      &copy; Copyright 2022, KIDZg.
     163      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.4.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     164    (Revision )
     165        </p>
    160166    </div>
    161 </div>
    162 <script>$('#searchbox').show(0);</script>
    163 
    164 
    165 
    166 
    167 
    168 
    169 
    170 
    171         </div>
    172       </div>
    173167      <div class="clearer"></div>
    174168    </div>
    175     <div class="footer">
    176       &copy;2022, Enrico Schwass.
    177      
    178       |
    179       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    180       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    181      
    182     </div>
    183 
    184    
    185 
    186    
     169        <div id="breadcrumbs">
     170                Python Module Index
     171        </div>
     172        <script type="text/javascript" charset="utf-8" src="_static/js/toc.js"></script>
    187173  </body>
    188174</html>
  • doc/html/search.html

    rf3421e6 r5547430  
    1 
    2 <!DOCTYPE html>
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    33
    44<html>
     
    88    <title>Search &#8212; AmmosReader 0.314 documentation</title>
    99    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
    10     <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
     10    <link rel="stylesheet" type="text/css" href="_static/css/adctheme.css" />
    1111   
    1212    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     
    1616    <script src="_static/searchtools.js"></script>
    1717    <script src="_static/language_data.js"></script>
     18    <meta name="generator" content="Sphinx/ADC Theme by Mirounga www.mirounga.fr"/>
    1819    <link rel="index" title="Index" href="genindex.html" />
    1920    <link rel="search" title="Search" href="#" />
     21    <link rel="top" title="AmmosReader 0.314 documentation" href="index.html" />
     22    <link media="only screen and (max-device-width: 480px)" href="_static/css/mobile.css" type="text/css" rel="stylesheet" />
    2023  <script src="searchindex.js" defer></script>
    21  
    2224   
    23   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
    24  
    25  
    26   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
     25
     26  </head><body>
     27<div id="docstitle">
     28    <p>AmmosReader 0.314 documentation</p>
     29</div>
     30<div id="header">
     31    <div id="title"><h1>Search</h1></div>
     32    <ul id="headerButtons">
     33        <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
     34        <li id="page_buttons">
     35            <div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
     36            <div class="headerButton"><a href="py-modindex.html" title="Python Module Index" >modules</a></div>
     37        </li>
     38    </ul>
     39</div>
     40
     41<div id="sphinxsidebar">
     42  <div class="sphinxsidebarwrapper">
     43        <ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
     44        <ul>
     45<li class="toctree-l1"><a class="reference internal" href="ammosreader.html">ammosreader package</a></li>
     46</ul>
     47
     48  </div>
     49</div>
    2750
    2851
    29   </head><body>
    30  
    3152
    3253    <div class="document">
    3354      <div class="documentwrapper">
    3455        <div class="bodywrapper">
    35          
    36 
    37           <div class="body" role="main">
     56          <div class="body">
    3857           
    3958  <h1 id="search-documentation">Search</h1>
     
    6887 
    6988
    70           </div>
    71          
     89          </div>
    7290        </div>
    7391      </div>
    74       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
    75         <div class="sphinxsidebarwrapper">
    76 <h1 class="logo"><a href="index.html">AmmosReader</a></h1>
    77 
    78 
    79 
    80 
    81 
    82 
    83 
    84 
    85 <h3>Navigation</h3>
    86 <ul>
    87 <li class="toctree-l1"><a class="reference internal" href="ammosreader.html">ammosreader package</a></li>
    88 </ul>
    89 
    90 <div class="relations">
    91 <h3>Related Topics</h3>
    92 <ul>
    93   <li><a href="index.html">Documentation overview</a><ul>
    94   </ul></li>
    95 </ul>
    96 </div>
    97 
    98 
    99 
    100 
    101 
    102 
    103 
    104 
    105         </div>
    106       </div>
     92    <div class="footer">
     93    <p>
     94      &copy; Copyright 2022, KIDZg.
     95      Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 4.4.0 <a href="https://github.com/mga-sphinx/sphinx_adc_theme">ADC Theme</a> .
     96    (Revision )
     97        </p>
     98    </div>
    10799      <div class="clearer"></div>
    108100    </div>
    109     <div class="footer">
    110       &copy;2022, Enrico Schwass.
    111      
    112       |
    113       Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
    114       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
    115      
    116     </div>
    117 
    118    
    119 
    120    
     101        <div id="breadcrumbs">
     102                Search
     103        </div>
     104        <script type="text/javascript" charset="utf-8" src="_static/js/toc.js"></script>
    121105  </body>
    122106</html>
  • doc/html/searchindex.js

    rf3421e6 r5547430  
    1 Search.setIndex({docnames:["PDW","ammosreader","index","modules"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["PDW.rst","ammosreader.rst","index.rst","modules.rst"],objects:{"":{ammosreader:[1,0,0,"-"]},"ammosreader.AmmosAudioDataHeader":{AmmosAudioDataHeader:[1,1,1,""],AmmosAudioDemodType:[1,1,1,""]},"ammosreader.AmmosAudioDataHeader.AmmosAudioDataHeader":{from_bytes:[1,2,1,""]},"ammosreader.AmmosAudioDataHeader.AmmosAudioDemodType":{mapping:[1,3,1,""]},"ammosreader.AmmosAudioReader":{AmmosAudioReader:[1,1,1,""]},"ammosreader.AmmosAudioReader.AmmosAudioReader":{EXTENDED_AUDIO_DATA_HEADER_SIZE:[1,4,1,""],GLOBAL_HEADER_SIZE:[1,4,1,""],STANDARD_AUDIO_DATA_HEADER_SIZE:[1,4,1,""],add_tag:[1,2,1,""],read_all_frames_left:[1,2,1,""],read_next_audio_data_body:[1,2,1,""],read_next_global_frame_body:[1,2,1,""],read_next_global_frame_body_data_header:[1,2,1,""],read_next_global_frame_body_extended_data_header:[1,2,1,""],read_next_global_frame_header:[1,2,1,""],read_next_single_frame:[1,2,1,""],rewind_to_start:[1,2,1,""]},"ammosreader.AmmosAudioSocketReader":{AmmosAudioSocketReader:[1,1,1,""]},"ammosreader.AmmosAudioSocketReader.AmmosAudioSocketReader":{read_next_frame:[1,2,1,""]},"ammosreader.AmmosContainer":{AmmosContainer:[1,1,1,""]},"ammosreader.AmmosContainer.AmmosContainer":{add_frame:[1,2,1,""],add_tag:[1,2,1,""],frequencies:[1,2,1,""],size:[1,2,1,""]},"ammosreader.AmmosExtendedAudioDataHeader":{AmmosExtendedAudioDataHeader:[1,1,1,""]},"ammosreader.AmmosExtendedAudioDataHeader.AmmosExtendedAudioDataHeader":{from_bytes:[1,2,1,""]},"ammosreader.AmmosExtendedIFDataHeader":{AmmosExtendedIFDataHeader:[1,1,1,""]},"ammosreader.AmmosExtendedIFDataHeader.AmmosExtendedIFDataHeader":{from_bytes:[1,2,1,""]},"ammosreader.AmmosGlobalFrameBody":{AmmosGlobalFrameBody:[1,1,1,""]},"ammosreader.AmmosGlobalFrameBody.AmmosGlobalFrameBody":{data_bytes_only:[1,2,1,""]},"ammosreader.AmmosGlobalFrameHeader":{AmmosGlobalFrameHeader:[1,1,1,""]},"ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader":{MAGIC_WORD:[1,4,1,""],from_bytes:[1,2,1,""],size:[1,2,1,""]},"ammosreader.AmmosIFDataBlock":{AmmosIFDataBlock:[1,1,1,""]},"ammosreader.AmmosIFDataHeader":{AmmosIFDataHeader:[1,1,1,""]},"ammosreader.AmmosIFDataHeader.AmmosIFDataHeader":{from_bytes:[1,2,1,""],header_size:[1,2,1,""]},"ammosreader.AmmosIFReader":{AmmosIFReader:[1,1,1,""]},"ammosreader.AmmosIFReader.AmmosIFReader":{add_tag:[1,2,1,""],read_all_frames_left:[1,2,1,""],read_next_global_frame_body:[1,2,1,""],read_next_global_frame_body_data_header:[1,2,1,""],read_next_global_frame_body_extended_data_header:[1,2,1,""],read_next_global_frame_header:[1,2,1,""],read_next_if_data_blocks:[1,2,1,""],read_next_single_frame:[1,2,1,""],rewind_to_start:[1,2,1,""]},"ammosreader.AmmosSingleFrame":{AmmosSingleFrame:[1,1,1,""]},"ammosreader.AmmosSingleFrame.AmmosSingleFrame":{data:[1,2,1,""],size_correct:[1,2,1,""]},"ammosreader.PDW":{PDW:[1,1,1,""]},"ammosreader.PDW.PDW":{__init__:[1,2,1,""],from_bytes:[1,2,1,""]},"ammosreader.PPDWContainer":{PPDWContainer:[1,1,1,""]},"ammosreader.PPDWContainer.PPDWContainer":{__init__:[1,2,1,""]},ammosreader:{AmmosAudioDataHeader:[1,0,0,"-"],AmmosAudioReader:[1,0,0,"-"],AmmosAudioSocketReader:[1,0,0,"-"],AmmosContainer:[1,0,0,"-"],AmmosExtendedAudioDataHeader:[1,0,0,"-"],AmmosExtendedIFDataHeader:[1,0,0,"-"],AmmosGlobalFrameBody:[1,0,0,"-"],AmmosGlobalFrameHeader:[1,0,0,"-"],AmmosIFDataBlock:[1,0,0,"-"],AmmosIFDataHeader:[1,0,0,"-"],AmmosIFReader:[1,0,0,"-"],AmmosSingleFrame:[1,0,0,"-"],PDW:[1,0,0,"-"],PPDWContainer:[1,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","property","Python property"],"4":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:property","4":"py:attribute"},terms:{"0":[0,1],"00":[0,1],"01":[0,1],"1":[0,1],"100":[0,1],"102":[0,1],"1048575":[0,1],"15":[0,1],"16":[0,1],"1970":[0,1],"2":[0,1],"200":[0,1],"204":[0,1],"24":1,"3":[0,1],"32":[0,1],"359":[0,1],"36":1,"4":[0,1],"409":[0,1],"44":1,"5":[0,1],"6":[0,1],"726574fb":1,"8":[0,1],"9":[0,1],"90":[0,1],"boolean":[0,1],"byte":[0,1],"class":[0,1],"db\u00b5v":[0,1],"float":[0,1],"import":1,"int":1,"return":[0,1],The:1,__init__:[0,1],accord:[0,1],add:1,add_fram:1,add_tag:1,after:[0,1],all:1,ammo:1,ammosaudiodatahead:[2,3],ammosaudiodemodtyp:1,ammosaudioread:[2,3],ammosaudiosocketread:[2,3],ammoscontain:[2,3],ammosextendedaudiodatahead:[2,3],ammosextendedifdatahead:[2,3],ammosglobalframebodi:[2,3],ammosglobalframehead:[2,3],ammosifdatablock:[2,3],ammosifdatahead:[2,3],ammosifread:[2,3],ammosread:0,ammossinglefram:[2,3],an:[0,1],antenna:[0,1],antenna_correct:1,arriv:[0,1],attribut:[0,1],audio:1,azimuth:[0,1],azimuth_confid:[0,1],bandwidth:1,base:[0,1],befor:[0,1],begin:1,bit:[0,1],block:[0,1],block_count:1,block_length:1,bodi:[0,1],byte_str:[0,1],bytearrai:1,center:[0,1],center_frequ:[0,1],channel:[0,1],channel_count:1,classmethod:[0,1],clockwis:[0,1],code:[0,1],confid:[0,1],contain:[0,1],content:[2,3],continu:[0,1],counter:[0,1],creat:[0,1],current:1,data:[0,1],data_bodi:1,data_bytes_onli:1,data_head:1,data_header_length:1,data_header_s:1,decim:1,degre:[0,1],demod_bandwidth:1,demod_typ:1,depend:[0,1],detect:[0,1],df_qualiti:[0,1],dict:1,direct:[0,1],e:[0,1],elev:[0,1],embed:1,end:1,etc:[0,1],even:1,extend:1,extended_audio_data_header_s:1,field:[0,1],file:[0,1],file_nam:1,find:[0,1],flag:[0,1],fm:[0,1],format:[0,1],frame:1,frame_length:1,frame_typ:1,frequenc:[0,1],frequency_shift_or_bandwidth:[0,1],from:[0,1],from_byt:[0,1],g:[0,1],global:1,global_frame_bodi:1,global_frame_head:1,global_header_s:1,header:1,header_s:1,horizont:[0,1],i:[0,1],if_data:1,if_datablock_head:1,incom:[0,1],incomplet:1,inform:[0,1],insid:1,instanc:[0,1],integ:[0,1],interest:[0,1],interpol:1,iqdwtxblock:[2,3],is_puls:[0,1],is_valid:[0,1],khz:[0,1],length:1,level:[0,1],level_unit:[0,1],list:1,m:[0,1],magic_word:1,map:1,mark:[0,1],mean:[0,1],minu:[0,1],modul:[2,3],mono:1,more:1,multipl:1,my:1,n:1,name:1,nanosecond:[0,1],next:1,none:1,number:1,object:[0,1],one:1,oper:1,packag:[2,3],paramet:[0,1],pars:1,pdw:[2,3],pdw_format:[0,1],pdw_format_identifi:[0,1],per:1,percent:[0,1],plu:[0,1],pointer:1,polar:[0,1],posit:1,ppdw:[0,1],ppdwcontain:[2,3],properti:1,psk:[0,1],puls:[0,1],pulse_level_or_pulse_field_strength:[0,1],pulse_width:[0,1],qualiti:[0,1],r:1,rate:1,reach:1,read:[0,1],read_all_frames_left:1,read_next_audio_data_bodi:1,read_next_fram:1,read_next_global_frame_bodi:1,read_next_global_frame_body_data_head:1,read_next_global_frame_body_extended_data_head:1,read_next_global_frame_head:1,read_next_if_data_block:1,read_next_single_fram:1,record:1,refer:[0,1],region:[0,1],region_of_interest:[0,1],remain:1,reserv:1,rewind_to_start:1,running_frame_numb:1,s:1,sampl:1,sample_count:1,sample_r:1,sample_s:1,sector:[0,1],set:[0,1],signal:[0,1],signal_end_miss:[0,1],signal_start_miss:[0,1],sinc:[0,1],singl:[0,1],size:1,size_correct:1,socket:1,sourc:[0,1],source_id:1,source_st:1,standard_audio_data_header_s:1,start:[0,1],statu:1,step:[0,1],stereo:1,stop:[0,1],store:[0,1],stream_start:1,strength:[0,1],string:[0,1],submodul:[2,3],tag:1,time:[0,1],time_of_arriv:[0,1],timestamp:1,tupl:1,type:[0,1],unknown:[0,1],until:1,valid:[0,1],valu:[0,1],vertic:[0,1],voltage_ref:1,wave:[0,1],width:[0,1],zero:[0,1]},titles:["PDW module","ammosreader package","ammosreader","ammosreader"],titleterms:{ammosaudiodatahead:1,ammosaudioread:1,ammosaudiosocketread:1,ammoscontain:1,ammosextendedaudiodatahead:1,ammosextendedifdatahead:1,ammosglobalframebodi:1,ammosglobalframehead:1,ammosifdatablock:1,ammosifdatahead:1,ammosifread:1,ammosread:[1,2,3],ammossinglefram:1,content:1,iqdwtxblock:1,modul:[0,1],packag:1,pdw:[0,1],ppdwcontain:1,submodul:1}})
     1Search.setIndex({docnames:["ammosreader","index","modules"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["ammosreader.rst","index.rst","modules.rst"],objects:{"":[[0,0,0,"-","ammosreader"]],"ammosreader.AmmosAudioDataHeader":[[0,1,1,"","AmmosAudioDataHeader"],[0,1,1,"","AmmosAudioDemodType"]],"ammosreader.AmmosAudioDataHeader.AmmosAudioDataHeader":[[0,2,1,"","from_bytes"]],"ammosreader.AmmosAudioDataHeader.AmmosAudioDemodType":[[0,3,1,"","mapping"]],"ammosreader.AmmosAudioReader":[[0,1,1,"","AmmosAudioReader"]],"ammosreader.AmmosAudioReader.AmmosAudioReader":[[0,4,1,"","EXTENDED_AUDIO_DATA_HEADER_SIZE"],[0,4,1,"","GLOBAL_HEADER_SIZE"],[0,4,1,"","STANDARD_AUDIO_DATA_HEADER_SIZE"],[0,2,1,"","add_tag"],[0,2,1,"","read_all_frames_left"],[0,2,1,"","read_next_audio_data_body"],[0,2,1,"","read_next_global_frame_body"],[0,2,1,"","read_next_global_frame_body_data_header"],[0,2,1,"","read_next_global_frame_body_extended_data_header"],[0,2,1,"","read_next_global_frame_header"],[0,2,1,"","read_next_single_frame"],[0,2,1,"","rewind_to_start"]],"ammosreader.AmmosAudioSocketReader":[[0,1,1,"","AmmosAudioSocketReader"]],"ammosreader.AmmosAudioSocketReader.AmmosAudioSocketReader":[[0,2,1,"","read_next_frame"]],"ammosreader.AmmosContainer":[[0,1,1,"","AmmosContainer"]],"ammosreader.AmmosContainer.AmmosContainer":[[0,2,1,"","add_frame"],[0,2,1,"","add_tag"],[0,2,1,"","frequencies"],[0,2,1,"","size"]],"ammosreader.AmmosExtendedAudioDataHeader":[[0,1,1,"","AmmosExtendedAudioDataHeader"]],"ammosreader.AmmosExtendedAudioDataHeader.AmmosExtendedAudioDataHeader":[[0,2,1,"","from_bytes"]],"ammosreader.AmmosExtendedIFDataHeader":[[0,1,1,"","AmmosExtendedIFDataHeader"]],"ammosreader.AmmosExtendedIFDataHeader.AmmosExtendedIFDataHeader":[[0,2,1,"","from_bytes"]],"ammosreader.AmmosGlobalFrameBody":[[0,1,1,"","AmmosGlobalFrameBody"]],"ammosreader.AmmosGlobalFrameBody.AmmosGlobalFrameBody":[[0,2,1,"","data_bytes_only"]],"ammosreader.AmmosGlobalFrameHeader":[[0,1,1,"","AmmosGlobalFrameHeader"]],"ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader":[[0,4,1,"","MAGIC_WORD"],[0,2,1,"","from_bytes"],[0,2,1,"","size"]],"ammosreader.AmmosIFDataBlock":[[0,1,1,"","AmmosIFDataBlock"]],"ammosreader.AmmosIFDataHeader":[[0,1,1,"","AmmosIFDataHeader"]],"ammosreader.AmmosIFDataHeader.AmmosIFDataHeader":[[0,2,1,"","from_bytes"],[0,2,1,"","header_size"]],"ammosreader.AmmosIFReader":[[0,1,1,"","AmmosIFReader"]],"ammosreader.AmmosIFReader.AmmosIFReader":[[0,2,1,"","add_tag"],[0,2,1,"","read_all_frames_left"],[0,2,1,"","read_next_global_frame_body"],[0,2,1,"","read_next_global_frame_body_data_header"],[0,2,1,"","read_next_global_frame_body_extended_data_header"],[0,2,1,"","read_next_global_frame_header"],[0,2,1,"","read_next_if_data_blocks"],[0,2,1,"","read_next_single_frame"],[0,2,1,"","rewind_to_start"]],"ammosreader.AmmosSingleFrame":[[0,1,1,"","AmmosSingleFrame"]],"ammosreader.AmmosSingleFrame.AmmosSingleFrame":[[0,2,1,"","data"],[0,2,1,"","size_correct"]],"ammosreader.PDW":[[0,1,1,"","PDW"]],"ammosreader.PDW.PDW":[[0,2,1,"","__init__"],[0,2,1,"","from_bytes"]],"ammosreader.PPDWContainer":[[0,1,1,"","PPDWContainer"]],"ammosreader.PPDWContainer.PPDWContainer":[[0,2,1,"","__init__"]],ammosreader:[[0,0,0,"-","AmmosAudioDataHeader"],[0,0,0,"-","AmmosAudioReader"],[0,0,0,"-","AmmosAudioSocketReader"],[0,0,0,"-","AmmosContainer"],[0,0,0,"-","AmmosExtendedAudioDataHeader"],[0,0,0,"-","AmmosExtendedIFDataHeader"],[0,0,0,"-","AmmosGlobalFrameBody"],[0,0,0,"-","AmmosGlobalFrameHeader"],[0,0,0,"-","AmmosIFDataBlock"],[0,0,0,"-","AmmosIFDataHeader"],[0,0,0,"-","AmmosIFReader"],[0,0,0,"-","AmmosSingleFrame"],[0,0,0,"-","PDW"],[0,0,0,"-","PPDWContainer"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","property","Python property"],"4":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:property","4":"py:attribute"},terms:{"0":0,"00":0,"01":0,"1":0,"100":0,"102":0,"1048575":0,"15":0,"16":0,"1970":0,"2":0,"200":0,"204":0,"24":0,"3":0,"32":0,"359":0,"36":0,"4":0,"409":0,"44":0,"5":0,"6":0,"726574fb":0,"8":0,"9":0,"90":0,"boolean":0,"byte":0,"class":0,"db\u00b5v":0,"float":0,"import":0,"int":0,"new":0,"return":0,For:0,The:0,__init__:0,accord:0,add:0,add_fram:0,add_tag:0,after:0,all:0,ammo:0,ammosaudiodatahead:[1,2],ammosaudiodemodtyp:0,ammosaudioread:[1,2],ammosaudiosocketread:[1,2],ammoscontain:[1,2],ammosextendedaudiodatahead:[1,2],ammosextendedifdatahead:[1,2],ammosglobalframebodi:[1,2],ammosglobalframehead:[1,2],ammosifdatablock:[1,2],ammosifdatahead:[1,2],ammosifread:[1,2],ammossinglefram:[1,2],an:0,antenna:0,antenna_correct:0,argument:0,arriv:0,attribut:0,audio:0,azimuth:0,azimuth_confid:0,bandwidth:0,base:0,befor:0,begin:0,bit:0,block:0,block_count:0,block_length:0,bodi:0,byte_str:0,bytearrai:0,center:0,center_frequ:0,channel:0,channel_count:0,classmethod:0,clockwis:0,code:0,confid:0,contain:0,content:[1,2],continu:0,counter:0,creat:0,current:0,d:0,data:0,data_bodi:0,data_bytes_onli:0,data_head:0,data_header_length:0,data_header_s:0,decim:0,degre:0,demod_bandwidth:0,demod_typ:0,depend:0,detect:0,df_qualiti:0,dict:0,dictionari:0,direct:0,e:0,elev:0,embed:0,empti:0,end:0,etc:0,even:0,exampl:0,extend:0,extended_audio_data_header_s:0,field:0,file:0,file_nam:0,find:0,flag:0,fm:0,format:0,frame:0,frame_length:0,frame_typ:0,frequenc:0,frequency_shift_or_bandwidth:0,from:0,from_byt:0,g:0,global:0,global_frame_bodi:0,global_frame_head:0,global_header_s:0,header:0,header_s:0,horizont:0,i:0,if_data:0,if_datablock_head:0,incom:0,incomplet:0,inform:0,initi:0,insid:0,instanc:0,integ:0,interest:0,interpol:0,iqdwtxblock:[1,2],is_puls:0,is_valid:0,iter:0,k:0,kei:0,keyword:0,khz:0,kwarg:0,length:0,level:0,level_unit:0,list:0,m:0,magic_word:0,map:0,mark:0,mean:0,minu:0,modul:[1,2],mono:0,more:0,multipl:0,my:0,n:0,name:0,nanosecond:0,next:0,none:0,number:0,object:0,one:0,oper:0,packag:[1,2],pair:0,paramet:0,pars:0,pdw:[1,2],pdw_format:0,pdw_format_identifi:0,per:0,percent:0,plu:0,pointer:0,polar:0,posit:0,ppdw:0,ppdwcontain:[1,2],properti:0,psk:0,puls:0,pulse_level_or_pulse_field_strength:0,pulse_width:0,qualiti:0,r:0,rate:0,reach:0,read:0,read_all_frames_left:0,read_next_audio_data_bodi:0,read_next_fram:0,read_next_global_frame_bodi:0,read_next_global_frame_body_data_head:0,read_next_global_frame_body_extended_data_head:0,read_next_global_frame_head:0,read_next_if_data_block:0,read_next_single_fram:0,record:0,refer:0,region:0,region_of_interest:0,remain:0,reserv:0,rewind_to_start:0,running_frame_numb:0,s:0,sampl:0,sample_count:0,sample_r:0,sample_s:0,sector:0,set:0,signal:0,signal_end_miss:0,signal_start_miss:0,sinc:0,singl:0,size:0,size_correct:0,socket:0,sourc:0,source_id:0,source_st:0,standard_audio_data_header_s:0,start:0,statu:0,step:0,stereo:0,stop:0,store:0,stream_start:0,strength:0,string:0,submodul:[1,2],tag:0,time:0,time_of_arriv:0,timestamp:0,tupl:0,two:0,type:0,unknown:0,until:0,v:0,valid:0,valu:0,vertic:0,via:0,voltage_ref:0,wave:0,width:0,zero:0},titles:["ammosreader package","ammosreader","ammosreader"],titleterms:{ammosaudiodatahead:0,ammosaudioread:0,ammosaudiosocketread:0,ammoscontain:0,ammosextendedaudiodatahead:0,ammosextendedifdatahead:0,ammosglobalframebodi:0,ammosglobalframehead:0,ammosifdatablock:0,ammosifdatahead:0,ammosifread:0,ammosread:[0,1,2],ammossinglefram:0,content:0,iqdwtxblock:0,modul:0,packag:0,pdw:0,ppdwcontain:0,submodul:0}})
  • doc/rst/conf.py

    rf3421e6 r5547430  
    1616import sys
    1717import sphinx_adc_theme
    18 sys.path.insert(0, os.path.abspath('../../'))
     18sys.path.insert(0, os.path.abspath('../../src/'))
    1919
    2020
  • doc/source/conf.py

    rf3421e6 r5547430  
    1616import sys
    1717import sphinx_adc_theme
    18 sys.path.insert(0, os.path.abspath('../../'))
     18sys.path.insert(0, os.path.abspath('../../src/'))
    1919
    2020
  • doc/source/index.rst

    rf3421e6 r5547430  
    1111   :caption: Contents:
    1212
     13   modules
    1314
    1415
Note: See TracChangeset for help on using the changeset viewer.